看各種框架的spring boot版本,配置信息都寫在yml或properties文件裏了,這裏實際上用了@ConfigurationProperties註解,源代碼的流程很複雜,先看看怎麼使用.
方式1:註解加在類上
@Component
@ConfigurationProperties(prefix = "test")
public class TestConfiguration {
private String name;
private Integer age;
...........
}
配置文件:
test.name=liming
test.age=25
測試:
@RestController
@RequestMapping("/con")
public class Controller {
@Autowired
private TestConfiguration testConfiguration;
@GetMapping("/test1")
public String get(){
return testConfiguration.toString();
}
}
/test1結果:TestConfiguration{name='liming', age=25}
方式2:註解加在Bean上
public class TestConfiguration2 {
private String name;
private Integer age;
......
}
建一個配置類,在配置類裏建個Bean,new個實體類
@Configuration
public class Confi {
@Bean(name="TEST2") // 如果沒有name,默認是類名TestConfiguration2
@ConfigurationProperties(prefix = "test")
public TestConfiguration2 get2(){
TestConfiguration2 testConfiguration2 = new TestConfiguration2();
System.out.println(testConfiguration2.toString());
return testConfiguration2;
}
}
controller測試:
注意: spring只會對同一個類管理一個bean,如果有兩個bean對象,spring就會報錯,提示你用@Primary來標註優先級
// 如果bean的name爲默認,則用@autowired注入
/*@Autowired
private TestConfiguration2 testConfiguration2;*/
@Resource(name="TEST2")
private TestConfiguration2 testConfiguration2;
@GetMapping("/test2")
public String get2(){
return testConfiguration2.toString();
}
項目啓動發現,spring 加載bean,bean的打印結果爲:TestConfiguration{name='null', age=null}
說明加載bean比從Properties裏拿值要快,
訪問/test2已經有值了 :TestConfiguration{name='liming', age=25}
擴展:與@Qualifier 組合運用
Properties文件裏添加test_前綴
test_.name=Tom
test_.age=27
讓TEST3對象作爲參數傳給TEST4裏.
@Bean(name = "TEST3")
@ConfigurationProperties(prefix = "test_")
public TestConfiguration2 get3(){
TestConfiguration2 testConfiguration2 = new TestConfiguration2();
System.out.println(testConfiguration2.toString());
return testConfiguration2;
}
@Bean(name = "TEST4")
public String test(@Qualifier("TEST3") TestConfiguration2 testConfiguration2){
return testConfiguration2.toString();
}
controller測試:
@Resource(name="TEST4")
private String TEST4str;
@GetMapping("/test3")
public String get3(){
return TEST4str;
}
訪問結果:TestConfiguration{name='Tom', age=27}