spring boot微服務(wù)自定義starter原理詳解
這篇文章主要介紹了spring boot微服務(wù)自定義starter原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
使用spring boot開(kāi)發(fā)微服務(wù)后,工程的數(shù)量大大增加(一定要按照領(lǐng)域來(lái)切,不要一個(gè)中間件客戶(hù)端包一個(gè)),讓各個(gè)jar從開(kāi)發(fā)和運(yùn)行時(shí)自包含成了一個(gè)重要的內(nèi)容之一。spring boot starter就可以用來(lái)解決該問(wèn)題(沒(méi)事啟動(dòng)時(shí)別依賴(lài)于applicationContext.getBean獲取bean進(jìn)行處理,依賴(lài)關(guān)系太折騰,有時(shí)候在復(fù)雜系統(tǒng)中解決此事比較麻煩,需要修改開(kāi)源框架代碼才能實(shí)現(xiàn),反過(guò)來(lái)修改開(kāi)源源碼后,維護(hù)也是個(gè)麻煩事)。言歸正傳,說(shuō)說(shuō)自定義starter。首先請(qǐng)熟悉spring boot的核心理念,不然容易為了starter而starter,這種情況太多了。
創(chuàng)建一個(gè)maven項(xiàng)目,在pom文件中添加如下依賴(lài):
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.0.0.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
創(chuàng)建properties屬性類(lèi),用于讀取屬性(當(dāng)然可選,如果一開(kāi)始沒(méi)有按照spring boot autoconfig的套路來(lái),改起來(lái)還是挺費(fèi)勁的,但是一旦這么做了,就會(huì)想,TMD這才是真正的開(kāi)發(fā)模式,@Value那套早該丟了)。
@ConfigurationProperties(prefix = "com.xxx") public class HelloServiceProperties { private String name = "james"; private String hobby = "cc"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } }
@ConfigurationProperties配置此注解可以自動(dòng)導(dǎo)入application.properties配置文件中的屬性,前提需要指定屬性前綴prefix。
3.創(chuàng)建配置類(lèi)
public class HelloService { private String name; private String hobby; public String getName() { return "name is " + name; } public String getHobby() { return "hobby is " + hobby; } public void setName(String name) { this.name = name; } public void setHobby(String hobby) { this.hobby = hobby; } }
4.創(chuàng)建自動(dòng)配置類(lèi):
@Configuration @EnableConfigurationProperties(HelloServiceProperties.class) @ConditionalOnClass(HelloServiceConfiguration.class) @ConditionalOnProperty(prefix = "com.xxx", value = "enabled", matchIfMissing = true)@ComponentScan({"com.xxx"}) // 如果bean比較多,一般采用這種方式 public class HelloServiceAutoConfiguration { @Autowired private HelloServiceProperties helloServiceProperties; @Bean // bean比較少、且順序和邏輯有特殊要求的模塊,一般采用這種方式 @ConditionalOnMissingBean(HelloServiceConfiguration.class) public HelloServiceConfiguration helloServiceConfiguration() { HelloService helloService = new HelloService(); helloService.setName(helloServiceProperties.getName()); helloService.setHobby(helloServiceProperties.getHobby()); return helloService; } }
5.在resources文件夾下面新建一個(gè)META-INF文件,并在下面創(chuàng)建spring.factories文件,將4中的配置類(lèi)進(jìn)行注冊(cè)。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.HelloServiceAutoConfiguration
6.新建一個(gè)springboot項(xiàng)目,在pom文件中添加剛剛打包的jar的坐標(biāo)。
7.使用@Autowired訪問(wèn)接口。
@SpringBootApplication @RestController public class Springboot03Application { @Autowired private HelloService helloService; public static void main(String[] args) { SpringApplication.run(Springboot03Application.class, args); } @RequestMapping("/name") public String getName() { return helloService.getName(); } @RequestMapping("/hobby") public String getHobby() { return helloService.getHobby(); } }
相比原來(lái)要使用@Import注解導(dǎo)入一個(gè)@Configuration類(lèi),或者在一處集中維護(hù)ComponentScan的所有路徑,使用autoconfigure starter可以讓?xiě)?yīng)用明顯實(shí)現(xiàn)的更加自包含和解耦。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- spring boot 自定義starter的實(shí)現(xiàn)教程
- springboot自定義Starter的具體流程
- Spring boot創(chuàng)建自定義starter的完整步驟
- springboot自定義starter實(shí)現(xiàn)過(guò)程圖解
- springboot自定義redis-starter的實(shí)現(xiàn)
- SpringBoot自動(dòng)配置之自定義starter的實(shí)現(xiàn)代碼
- 使用SpringBoot自定義starter的完整步驟
- Java SpringBoot自定義starter詳解
- SpringBoot如何自定義starter
- SpringBoot自定義start詳細(xì)圖文教程
相關(guān)文章
一文徹底弄懂Java中MultipartFile接口和File類(lèi)
MultipartFile是一個(gè)接口,我們可以理解為是Spring?給我們綁定的一個(gè)在使用文件上傳等時(shí)簡(jiǎn)便實(shí)現(xiàn)的口子,這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文徹底弄懂Java中MultipartFile接口和File類(lèi)的相關(guān)資料,需要的朋友可以參考下2023-11-11Spring?boot?整合RabbitMQ實(shí)現(xiàn)通過(guò)RabbitMQ進(jìn)行項(xiàng)目的連接
RabbitMQ是一個(gè)開(kāi)源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語(yǔ)言編寫(xiě),支持多種客戶(hù)端,這篇文章主要介紹了Spring?boot?整合RabbitMQ實(shí)現(xiàn)通過(guò)RabbitMQ進(jìn)行項(xiàng)目的連接,需要的朋友可以參考下2022-10-10java正則表達(dá)式簡(jiǎn)單使用和網(wǎng)頁(yè)爬蟲(chóng)的制作代碼
java正則表達(dá)式簡(jiǎn)單使用和網(wǎng)頁(yè)爬蟲(chóng)的制作代碼,需要的朋友可以參考一下2013-05-05詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件
這篇文章主要介紹了詳解springboot啟動(dòng)時(shí)是如何加載配置文件application.yml文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06SpringCloud學(xué)習(xí)筆記之OpenFeign進(jìn)行服務(wù)調(diào)用
OpenFeign對(duì)feign進(jìn)行進(jìn)一步的封裝,添加了springmvc的一些功能,更加強(qiáng)大,下面這篇文章主要給大家介紹了關(guān)于SpringCloud學(xué)習(xí)筆記之OpenFeign進(jìn)行服務(wù)調(diào)用的相關(guān)資料,需要的朋友可以參考下2022-01-01java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法示例
這篇文章主要介紹了java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法,結(jié)合具體實(shí)例形式分析了java基于數(shù)組的矩陣定義、遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09簡(jiǎn)單實(shí)現(xiàn)Spring的IOC原理詳解
這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)Spring的IOC原理詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12