中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot Starter的簡介及用法是怎樣的

發布時間:2021-09-29 15:07:53 來源:億速云 閱讀:133 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關Spring Boot Starter的簡介及用法是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Spring Boot 的便利性體現在,它簡化了很多煩瑣的配置,這對于開發人員來說是一個福音,通過引入各種 Spring Boot Starter 包可以快速搭建出一個項目的腳手架。

目前提供的 Spring Boot Starter 包有:

  • spring-boot-starter-web:快速構建基于 Spring MVC 的 Web 項目,使用 Tomcat 做默認嵌入式容器。

  • spring-boot-starter-data-redis:操作 Redis。

  • spring-boot-starter-data-mongodb:操作 Mongodb。

  • spring-boot-starter-data-jpa:操作 Mysql

  • spring-boot-starter-activemq:操作 Activemq。



自動配置非常方便,當我們要操作 Mongodb 的時候,只需要引入 spring-boot-starter-data-mongodb 的依賴,然后配置 Mongodb 的鏈接信息 spring.data.mongodb.uri=mongodb://localhost/test 就可以使用 MongoTemplate 來操作數據,MongoTemplate 的初始化工作全部交給 Starter 來完成。

自動配置麻煩的是當出現錯誤時,排查問題的難度上升了。自動配置的邏輯都在 Spring Boot Starter 中,要想快速定位問題,就必須得了解 Spring Boot Starter 的內部原理。接下來我們自己動手來實現一個 Spring Boot Starter。

Spring Boot Starter項目創建

創建一個項目 spring-boot-starter-demo,pom.xml 配置代碼如下所示。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>

創建一個配置類,用于在屬性文件中配置值,相當于 spring.data.mongo 這種形式,代碼如下所示。

import org.springframework.boot.context.properties.ConfigurationProperties;import lombok.Data;@Data@ConfigurationProperties("spring.user")public class UserPorperties {private String name;
}

再定義一個 Client,相當于 MongoTemplate,里面定一個方法,用于獲取配置中的值,代碼如下所示。

public class UserClient {private UserPorperties userPorperties;public UserClient() {

    }public UserClient(UserPorperties p) {this.userPorperties = p;
    }public String getName() {return userPorperties.getName();
    }
}

自動創建客戶端

一個最基本的 Starter 包定義好了,但目前肯定是不能使用 UserClient,因為我們沒有自動構建 UserClient 的實例。接下來開始構建 UserClient,代碼如下所示。

@Configuration@EnableConfigurationProperties(UserPorperties.class)
public class UserAutoConfigure {@Bean@ConditionalOnProperty(prefix = "spring.user", value = "enabled", havingValue = "true")
    public UserClient userClient(UserPorperties userPorperties) {return new UserClient(userPorperties);
    }
}

Spring Boot 會默認掃描跟啟動類平級的包,假如我們的 Starter 跟啟動類不在同一個主包下,如何能讓 UserAutoConfigure 生效?

在 resources 下創建一個 META-INF 文件夾,然后在 META-INF 文件夾中創建一個 spring.factories 文件,文件中指定自動配置的類:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cxytiandi.demo.UserAutoConfigure

Spring Boot 啟動時會去讀取 spring.factories 文件,然后根據配置激活對應的配置類,至此一個簡單的 Starter 包就實現了。

使用 Starter

現在可以在其他的項目中引入這個 Starter 包,代碼如下所示。

<dependency><groupId>com.cxytiandi</groupId><artifactId>spring-boot-starter-demo</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

引入之后就直接可以使用 UserClient,UserClient 在項目啟動的時候已經自動初始化好,代碼如下所示。

@RestControllerpublic class UserController {@Autowiredprivate UserClient userClient;@GetMapping("/user/name")public String getUserName() {return userClient.getName();
    }
}

屬性文件中配置 name 的值和開啟 UserClient:

spring.user.name=zhangsanspring.user.enabled=true

訪問 /user/name 就可以返回我們配置的 zhangsan。

使用注解開啟 Starter 自動構建

很多時候我們不想在引入 Starter 包時就執行初始化的邏輯,而是想要由用戶來指定是否要開啟 Starter 包的自動配置功能,比如常用的 @EnableAsync 這個注解就是用于開啟調用方法異步執行的功能。

同樣地,我們也可以通過注解的方式來開啟是否自動配置,如果用注解的方式,那么 spring.factories 就不需要編寫了,下面就來看一下怎么定義啟用自動配置的注解,代碼如下所示。

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import({UserAutoConfigure.class})
public @interface EnableUserClient {

}

這段代碼的核心是 @Import({UserAutoConfigure.class}),通過導入的方式實現把 UserAutoConfigure 實例加入 SpringIOC 容器中,這樣就能開啟自動配置了。

使用方式就是在啟動類上加上該注解,代碼如下所示。

@SpringBootApplicationpublic class SpringBootDemoApplication {public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}

使用配置開啟 Starter 自動構建

在某些場景下,UserAutoConfigure 中會配置多個對象,對于這些對象,如果不想全部配置,或是想讓用戶指定需要開啟配置的時候再去構建對象,這個時候我們可以通過 @ConditionalOnProperty 來指定是否開啟配置的功能,代碼如下所示。

@Bean@ConditionalOnProperty(prefix = "spring.user",value = "enabled",havingValue = "true")
public UserClient userClient(UserPorperties userPorperties) {return new UserClient(userPorperties);
}

通過上面的配置,只有當啟動類加了 @EnableUserClient 并且配置文件中 spring.user.enabled=true 的時候才會自動配置 UserClient。

配置 Starter 內容提示

在自定義 Starter 包的過程中,還有一點比較重要,就是對配置的內容項進行提示,需要注意的是,Eclipse 中是不支持提示的,Spring Tools 4 for Eclipse 中可以提示。

定義提示內容需要在 META-INF 中創建一個 spring-configuration-metadata.json 文件,代碼如下所示。

{ "properties": [ { "name": "spring.user.name", "defaultValue": "cxytinadi" }, { "name": "spring.user.enabled", "type": "java.lang.Boolean", "defaultValue": false } ] }
  • name:配置名

  • type:配置的數據類型

  • defaultValue:默認值

上述就是小編為大家分享的Spring Boot Starter的簡介及用法是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐平市| 宜州市| 德昌县| 长泰县| 崇左市| 广汉市| 绥化市| 石河子市| 称多县| 简阳市| 连城县| 万山特区| 陆川县| 永靖县| 辉县市| 青海省| 乾安县| 永福县| 神木县| 棋牌| 奉贤区| 于都县| 民县| 滨州市| 衢州市| 五莲县| 洞头县| 新民市| 玉屏| 云林县| 噶尔县| 六盘水市| 安溪县| 灯塔市| 资讯| 巴东县| 巴林右旗| 房产| 台山市| 新和县| 定陶县|