在上篇博客初識spring boot框架中我們初步見識了springboot的方便之處,很多小伙伴可能也會好奇這個spring boot是怎么實現自動配置的,那么今天我就帶小伙伴我們自己來實現一個簡單的spring boot 自動配置的案例,看看這一切到底是怎么發生的。
假設我的需求是這樣的:當我的項目中存在某個類的時候,系統自動為我配置該類的bean,同時,我這個bean的屬性還可以在application.properties中進行配置,ok,就這樣一個需求,我們來看看怎么實現。
1、新建starter的maven項目
我這里以intellij idea創建project為例,其實很簡單,創建一個maven項目,但是注意創建的時候選擇quickstart,步驟如下:
ok,這樣我們就創建好一個project了。
2.添加依賴
由于我們要使用spring boot的自動配置功能,所以在工程創建成功之后首先要添加spring boot自身的自動配置作為依賴,如下:
1
2
3
4
5
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-autoconfigure</artifactid> <version> 1.4 . 2 .release</version> </dependency> |
3.屬性配置
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@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中來直接設置,如果不設置的話默認為world。
4.判斷依據類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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; } } |
我們一會的例子就是根據這個類是否存在來創建這個類的bean,當然這個類也可以是第三方類庫。
5.自動配置類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@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的情況下系統會自動配置需要的bean,@conditionalonproperty注解則表示指定的屬性要滿足的條件,在helloservice方法中我們則使用了helloserviceproperties提供的參數。
6.注冊配置
在resources目錄下新建meta-inf目錄,然后在meta-inf目錄下創建spring.factories文件,文件內容如下,表示設置自動配置類的位置,若有多個配置類用”,”隔開即可。:
org.springframework.boot.autoconfigure.enableautoconfiguration=org.sang.helloserviceautoconfiguration
正常情況下我們按步驟一創建出來的project是沒有resources這個文件夾的,在intellij idea這個工具中,我們需要先創建一個directory,然后將之設置為resources root即可,設置方式如下:選中resources目錄右鍵單擊–》mark directory as–》resource root。
7.在項目中使用
ok,經過上面幾個步驟我們的自動配置功能就算死寫好了,接下來我們要在自己的項目中來使用它了,正常情況下做好自動配置類之后我們需要將之上傳到 maven 私服上然后直接在項目中引用,也可以將之安裝到本地庫,這里我選擇后者的一個簡化方式,直接創建module來引用這個自動配置module(如果小伙伴是用sts或者myeclipse之類的開發工具直接創建新工程然后添加引用類庫即可)。
創建module方式很簡單,選中剛才的project右鍵單擊,new一個module,這個module是一個springboot項目(不清楚怎么創建springboot項目可以查看這篇文章初識spring boot框架),創建成功之后選擇新建的module按f4打開module設置,然后選擇右邊的加號添加依賴,如下:
然后在新建module的pom.xml文件中添加如下依賴:
1
2
3
4
5
|
<dependency> <groupid>org.sang</groupid> <artifactid>org.sang.mystarter</artifactid> <version> 1.0 -snapshot</version> </dependency> |
實際上就是我們剛剛創建的自動配置文件的坐標。然后新module的入口類中添加如下代碼:
1
2
3
4
5
6
7
|
@autowired private helloservice helloservice; @requestmapping ( "/" ) public string index(){ return helloservice.sayhello(); } |
使用剛剛創建的helloservice,如果需要我們可以在application.properties中添加如下配置:
1
|
hello.msg = 賣花擔上看桃李, 拍酒樓頭聽管弦。 |
運行module,然后在瀏覽器中訪問,結果如下:
ok,這就是一個簡單的自定義自動配置類。
本案例下載地址:本案例github地址
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/u012702547/article/details/53750449