這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Spring Boot Starter的簡(jiǎn)介及用法是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元紫云做網(wǎng)站,已為上家服務(wù),為紫云各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
Spring Boot 的便利性體現(xiàn)在,它簡(jiǎn)化了很多煩瑣的配置,這對(duì)于開發(fā)人員來說是一個(gè)福音,通過引入各種 Spring Boot Starter 包可以快速搭建出一個(gè)項(xiàng)目的腳手架。
目前提供的 Spring Boot Starter 包有:
spring-boot-starter-web:快速構(gòu)建基于 Spring MVC 的 Web 項(xiàng)目,使用 Tomcat 做默認(rèn)嵌入式容器。
spring-boot-starter-data-redis:操作 Redis。
spring-boot-starter-data-MongoDB:操作 Mongodb。
spring-boot-starter-data-jpa:操作 MySQL。
spring-boot-starter-activemq:操作 Activemq。
自動(dòng)配置非常方便,當(dāng)我們要操作 Mongodb 的時(shí)候,只需要引入 spring-boot-starter-data-mongodb 的依賴,然后配置 Mongodb 的鏈接信息 spring.data.mongodb.uri=mongodb://localhost/test 就可以使用 MongoTemplate 來操作數(shù)據(jù),MongoTemplate 的初始化工作全部交給 Starter 來完成。
自動(dòng)配置麻煩的是當(dāng)出現(xiàn)錯(cuò)誤時(shí),排查問題的難度上升了。自動(dòng)配置的邏輯都在 Spring Boot Starter 中,要想快速定位問題,就必須得了解 Spring Boot Starter 的內(nèi)部原理。接下來我們自己動(dòng)手來實(shí)現(xiàn)一個(gè) Spring Boot Starter。
創(chuàng)建一個(gè)項(xiàng)目 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>
創(chuàng)建一個(gè)配置類,用于在屬性文件中配置值,相當(dāng)于 spring.data.mongo 這種形式,代碼如下所示。
import org.springframework.boot.context.properties.ConfigurationProperties;import lombok.Data;@Data@ConfigurationProperties("spring.user")public class UserPorperties {private String name;
}再定義一個(gè) Client,相當(dāng)于 MongoTemplate,里面定一個(gè)方法,用于獲取配置中的值,代碼如下所示。
public class UserClient {private UserPorperties userPorperties;public UserClient() {
}public UserClient(UserPorperties p) {this.userPorperties = p;
}public String getName() {return userPorperties.getName();
}
}一個(gè)最基本的 Starter 包定義好了,但目前肯定是不能使用 UserClient,因?yàn)槲覀儧]有自動(dòng)構(gòu)建 UserClient 的實(shí)例。接下來開始構(gòu)建 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 會(huì)默認(rèn)掃描跟啟動(dòng)類平級(jí)的包,假如我們的 Starter 跟啟動(dòng)類不在同一個(gè)主包下,如何能讓 UserAutoConfigure 生效?
在 resources 下創(chuàng)建一個(gè) META-INF 文件夾,然后在 META-INF 文件夾中創(chuàng)建一個(gè) spring.factories 文件,文件中指定自動(dòng)配置的類:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.cxytiandi.demo.UserAutoConfigure
Spring Boot 啟動(dòng)時(shí)會(huì)去讀取 spring.factories 文件,然后根據(jù)配置激活對(duì)應(yīng)的配置類,至此一個(gè)簡(jiǎn)單的 Starter 包就實(shí)現(xiàn)了。
現(xiàn)在可以在其他的項(xiàng)目中引入這個(gè) Starter 包,代碼如下所示。
<dependency><groupId>com.cxytiandi</groupId><artifactId>spring-boot-starter-demo</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
引入之后就直接可以使用 UserClient,UserClient 在項(xiàng)目啟動(dòng)的時(shí)候已經(jīng)自動(dòng)初始化好,代碼如下所示。
@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。
很多時(shí)候我們不想在引入 Starter 包時(shí)就執(zhí)行初始化的邏輯,而是想要由用戶來指定是否要開啟 Starter 包的自動(dòng)配置功能,比如常用的 @EnableAsync 這個(gè)注解就是用于開啟調(diào)用方法異步執(zhí)行的功能。
同樣地,我們也可以通過注解的方式來開啟是否自動(dòng)配置,如果用注解的方式,那么 spring.factories 就不需要編寫了,下面就來看一下怎么定義啟用自動(dòng)配置的注解,代碼如下所示。
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import({UserAutoConfigure.class})
public @interface EnableUserClient {
}這段代碼的核心是 @Import({UserAutoConfigure.class}),通過導(dǎo)入的方式實(shí)現(xiàn)把 UserAutoConfigure 實(shí)例加入 SpringIOC 容器中,這樣就能開啟自動(dòng)配置了。
使用方式就是在啟動(dòng)類上加上該注解,代碼如下所示。
@SpringBootApplicationpublic class SpringBootDemoApplication {public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}在某些場(chǎng)景下,UserAutoConfigure 中會(huì)配置多個(gè)對(duì)象,對(duì)于這些對(duì)象,如果不想全部配置,或是想讓用戶指定需要開啟配置的時(shí)候再去構(gòu)建對(duì)象,這個(gè)時(shí)候我們可以通過 @ConditionalOnProperty 來指定是否開啟配置的功能,代碼如下所示。
@Bean@ConditionalOnProperty(prefix = "spring.user",value = "enabled",havingValue = "true")
public UserClient userClient(UserPorperties userPorperties) {return new UserClient(userPorperties);
}通過上面的配置,只有當(dāng)啟動(dòng)類加了 @EnableUserClient 并且配置文件中 spring.user.enabled=true 的時(shí)候才會(huì)自動(dòng)配置 UserClient。
在自定義 Starter 包的過程中,還有一點(diǎn)比較重要,就是對(duì)配置的內(nèi)容項(xiàng)進(jìn)行提示,需要注意的是,Eclipse 中是不支持提示的,Spring Tools 4 for Eclipse 中可以提示。
定義提示內(nèi)容需要在 META-INF 中創(chuàng)建一個(gè) spring-configuration-metadata.json 文件,代碼如下所示。
{ "properties": [ { "name": "spring.user.name", "defaultValue": "cxytinadi" }, { "name": "spring.user.enabled", "type": "java.lang.Boolean", "defaultValue": false } ] }name:配置名
type:配置的數(shù)據(jù)類型
defaultValue:默認(rèn)值
上述就是小編為大家分享的Spring Boot Starter的簡(jiǎn)介及用法是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁(yè)名稱:SpringBootStarter的簡(jiǎn)介及用法是怎樣的
網(wǎng)站URL:http://chinadenli.net/article18/pgjgdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、企業(yè)建站、微信小程序、、Google、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)