1.7 spring Boot免除了項目中大部分的手動配置,對於一些特定狀況,咱們能夠經過修改全局配置文件以適應具體生產環境,能夠說,幾乎全部的配置均可以寫在application.peroperties文件中,Spring Boot會自動加載全局配置文件從而免除咱們手動加載的煩惱。可是,若是咱們自定義配置文件,Spring Boot是沒法識別這些配置文件的,此時就須要咱們手動加載。接下來,將針對Spring
Boot的自定義配置文件及其加載方式進行講解
1.7.1 使用@PropertySource加載配置文件
對於這種加載自定義配置文件的需求,可使用@PropertySource註解結合@Configuration註解配置類的方式來實現。@PropertySource註解用於指定自定義配置文件的具體位置和名稱。同時,爲了保證Spring Boot可以掃描該註解,還須要類上添加@Configuration註解將實體類做爲自定義配置類。
固然,若是須要將自定義配置文件中的屬性值注入到對應類的屬性中,可使用@ConfigurationProperties或者@Value註解進行屬性值注入
演示:
(1)打開Spring Boot項目的resources目錄,在項目的類路徑下新建一個test.properties自定義配置文件,在該配置文件中編寫須要設置的配置屬性spring
test.id=110app
test.name=test框架
1234567
(2)在com.lagou.pojo包下新建立一個配置類MyProperties,提供test.properties自定義配置文件中對應的屬性,並根據@PropertySource註解的使用進行相關配置測試
@Configuration // 自定義配置類 @PropertySource("classpath:test.properties") // 指定自定義配置文件位置和名稱 @EnableConfigurationProperties(MyProperties.class)
// 開啓對應配置類的屬性注入功能spa
@ConfigurationProperties(prefix =
"test") // 指定配置文件注入屬性前綴code
public class MyProperties {
private int id;對象
private String name;get
// 省略屬性getXX()和setXX()方法io
// 省略toString()方法class
}
1234567891011121314151617181920212223242526
主要是一個自定義配置類,經過相關注解引入了自定義的配置文件,並完成了自定義屬性值的注入。針對示例中的幾個註解,具體說明以下
@Configuration註解表示當前類是一個自定義配置類,並添加爲Spring容器的組件,這裏也可使用傳統的@Component註解;
@PropertySource(「classpath:test.properties」)註解指定了自定義配置文件的位置和名稱,此示例表示自定義配置文件爲classpath類路徑下的test.properties文件;
@ConfigurationProperties(prefix =
「test」)註解將上述自定義配置文件test.properties中以test開頭的屬性值注入到該配置類屬性中。
若是配置類上使用的是@Component註解而非@Configuration註解,那麼@EnableConfigurationProperties註解還能夠省略
(3)進行測試
@Autowired
private MyProperties myProperties;
@Test
public void myPropertiesTest() {
System.out.println(myProperties);
}
1234567891011121314151617
打印結果:
1.7.2
使用@Configuration編寫自定義配置類
在Spring Boot框架中,推薦使用配置類的方式向容器中添加和配置組件
在Spring Boot框架中,一般使用@Configuration註解定義一個配置類,Spring Boot會自動掃描和識別配置類,從而替換傳統Spring框架中的XML配置文件。
當定義一個配置類後,還須要在類中的方法上使用@Bean註解進行組件配置,將方法的返回對象注入到Spring容器中,而且組件名稱默認使用的是方法名,固然也可使用@Bean註解的name或value屬性自定義組件的名稱
演示:
(1)在項目下新建一個com.lagou.config包,並在該包下新建立一個類MyService,該類中不須要編寫任何代碼
public class MyService {
}
1234
建立了一個空的MyService類,而該類目前沒有添加任何配置和註解,所以還沒法正常被Spring Boot掃描和識別
(2) 在項目的com.lagou.config包下,新建一個類MyConfig,並使用@Configuration註解將該類聲明一個配置類,內容以下:
@Configuration // 定義該類是一個配置類 public class MyConfig {
@Bean // 將返回值對象做爲組件添加到Spring容器中,該組件id默認爲方法名
public MyService myService(){
return new MyService();
} }
1234567891011121314151617
MyConfig是@Configuration註解聲明的配置類(相似於聲明瞭一個XML配置文件),該配置類會被Spring Boot自動掃描識別;使用@Bean註解的myService()方法,其返回值對象會做爲組件添加到了Spring容器中(相似於XML配置文件中的標籤配置),而且該組件的id默認是方法名myService
(3)測試類
@Autowired
private ApplicationContext
applicationContext;
@Test
public void iocTest() {
System.out.println(applicationContext.containsBean("myService"));
}
12345678910111213
上述代碼中,先經過@Autowired註解引入了Spring容器實例ApplicationContext,而後在測試方法iocTest()中測試查看該容器中是否包括id爲myService的組件。
執行測試方法iocTest() ,查看控制檯輸出效果,結果以下:
從測試結果能夠看出,測試方法iocTest()運行成功,顯示運行結果爲true,表示Spirng的IOC容器中也已經包含了id爲myService的實例對象組件,說明使用自定義配置類的形式完成了向Spring容器進行組件的添加和配置
上了拉勾教育的《Java工程師高薪訓練營》,作一下筆記。但願拉勾能給我推到想去的公司,目標:字節!!