初識Spring Boot框架之Spring Boot的自動配置
在上篇博客初識Spring Boot框架中我們初步見識了SpringBoot的方便之處,很多小伙伴可能也會好奇這個spring Boot是怎么實現(xiàn)自動配置的,那么今天我就帶小伙伴我們自己來實現(xiàn)一個簡單的Spring Boot 自動配置的案例,看看這一切到底是怎么發(fā)生的。
假設(shè)我的需求是這樣的:當(dāng)我的項目中存在某個類的時候,系統(tǒng)自動為我配置該類的Bean,同時,我這個Bean的屬性還可以在application.properties中進行配置,OK,就這樣一個需求,我們來看看怎么實現(xiàn)。
1、新建starter的Maven項目
我這里以IntelliJ IDEA創(chuàng)建Project為例,其實很簡單,創(chuàng)建一個Maven項目,但是注意創(chuàng)建的時候選擇quickstart,步驟如下:
OK,這樣我們就創(chuàng)建好一個Project了。
2.添加依賴
由于我們要使用Spring Boot的自動配置功能,所以在工程創(chuàng)建成功之后首先要添加Spring Boot自身的自動配置作為依賴,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>1.4.2.RELEASE</version> </dependency>
3.屬性配置
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
private static final String MSG = "world";
private String msg = MSG;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
這里就是一個簡單的類,和上篇博客中我們提到的 類型安全的屬性獲取是一致的,這里屬性的值我們可以在application.properties中來直接設(shè)置,如果不設(shè)置的話默認為world。
4.判斷依據(jù)類
public class HelloService {
private String msg;
public String sayHello(){
return "hello " + msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
我們一會的例子就是根據(jù)這個類是否存在來創(chuàng)建這個類的Bean,當(dāng)然這個類也可以是第三方類庫。
5.自動配置類
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello",value = "enable",matchIfMissing = true)
public class HelloServiceAutoConfiguration {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}
這里@ConditionalOnClass注解主要是用來判斷HelloService這個類在路徑中是否存在,在存在且容器中沒有該類的Bean的情況下系統(tǒng)會自動配置需要的Bean,@ConditionalOnProperty注解則表示指定的屬性要滿足的條件,在helloService方法中我們則使用了HelloServiceProperties提供的參數(shù)。
6.注冊配置
在resources目錄下新建META-INF目錄,然后在META-INF目錄下創(chuàng)建spring.factories文件,文件內(nèi)容如下,表示設(shè)置自動配置類的位置,若有多個配置類用”,”隔開即可。:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.sang.HelloServiceAutoConfiguration
正常情況下我們按步驟一創(chuàng)建出來的Project是沒有resources這個文件夾的,在IntelliJ IDEA這個工具中,我們需要先創(chuàng)建一個directory,然后將之設(shè)置為resources root即可,設(shè)置方式如下:選中resources目錄右鍵單擊–》Mark Directory as–》Resource Root。
7.在項目中使用
OK,經(jīng)過上面幾個步驟我們的自動配置功能就算死寫好了,接下來我們要在自己的項目中來使用它了,正常情況下做好自動配置類之后我們需要將之上傳到 maven 私服上然后直接在項目中引用,也可以將之安裝到本地庫,這里我選擇后者的一個簡化方式,直接創(chuàng)建Module來引用這個自動配置Module(如果小伙伴是用STS或者MyEclipse之類的開發(fā)工具直接創(chuàng)建新工程然后添加引用類庫即可)。
創(chuàng)建Module方式很簡單,選中剛才的Project右鍵單擊,New一個Module,這個Module是一個SpringBoot項目(不清楚怎么創(chuàng)建SpringBoot項目可以查看這篇文章初識Spring Boot框架),創(chuàng)建成功之后選擇新建的Module按F4打開Module設(shè)置,然后選擇右邊的加號添加依賴,如下:


然后在新建Module的pom.xml文件中添加如下依賴:
<dependency>
<groupId>org.sang</groupId>
<artifactId>org.sang.mystarter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
實際上就是我們剛剛創(chuàng)建的自動配置文件的坐標。然后新Module的入口類中添加如下代碼:
@Autowired
private HelloService helloService;
@RequestMapping("/")
public String index(){
return helloService.sayHello();
}
使用剛剛創(chuàng)建的HelloService,如果需要我們可以在application.properties中添加如下配置:
hello.msg = 賣花擔(dān)上看桃李, 拍酒樓頭聽管弦。
運行Module,然后在瀏覽器中訪問,結(jié)果如下:

OK,這就是一個簡單的自定義自動配置類。
本案例下載地址:本案例GitHub地址
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成RabbitMQ實現(xiàn)用戶注冊的示例代碼
這篇文章主要介紹了SpringBoot集成RabbitMQ實現(xiàn)用戶注冊的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
SpringBoot集成ShedLock實現(xiàn)分布式定時任務(wù)的示例代碼
ShedLock 是一個 Java 庫,通常用于分布式系統(tǒng)中,確保定時任務(wù)(Scheduled Tasks)在集群環(huán)境下只被某一個實例執(zhí)行一次,本文給大家介紹了SpringBoot集成ShedLock實現(xiàn)分布式定時任務(wù)的示例代碼,需要的朋友可以參考下2024-12-12
Java Socket實現(xiàn)聊天室附1500行源代碼
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。本篇文章手把手帶你通過Java Socket來實現(xiàn)自己的聊天室,大家可以在過程中查缺補漏,溫故而知新2021-10-10
SpringBoot項目執(zhí)行腳本 自動拉取最新代碼并重啟的實例內(nèi)容
在本篇文章里小編給大家整理的是一篇關(guān)于SpringBoot項目執(zhí)行腳本 自動拉取最新代碼并重啟的實例內(nèi)容,有需要的朋友們參考下。2019-12-12
springboot項目攔截器重定向循環(huán)問題的解決
這篇文章主要介紹了springboot項目攔截器重定向循環(huán)問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java將List轉(zhuǎn)換為String的幾種方式
我們大家在實際開發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,下面這篇文章主要給大家介紹了關(guān)于Java將List轉(zhuǎn)換為String的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05

