springboot属性注入
SpringBoot的屬性注入
在上面的案例中,我們實(shí)驗(yàn)了java配置方式。不過(guò)屬性注入使用的是@Value注解。這種方式雖然可行,但是不夠強(qiáng)大,因?yàn)樗荒茏⑷牖绢?lèi)型值。
在SpringBoot中,提供了一種新的屬性注入方式,支持各種java基本數(shù)據(jù)類(lèi)型及復(fù)雜類(lèi)型的注入。
1)新建JdbcProperties,用來(lái)進(jìn)行屬性注入:
代碼:
@ConfigurationProperties(prefix = "jdbc") public class JdbcProperties {private String url;private String driverClassName;private String username;private String password;// ... 略// getters 和 setters }-
在類(lèi)上通過(guò)@ConfigurationProperties注解聲明當(dāng)前類(lèi)為屬性讀取類(lèi)
-
prefix="jdbc"讀取屬性文件中,前綴為jdbc的值。
-
在類(lèi)上定義各個(gè)屬性,名稱(chēng)必須與屬性文件中jdbc.后面部分一致,并且必須具有g(shù)etter和setter方法
-
需要注意的是,這里我們并沒(méi)有指定屬性文件的地址,SpringBoot默認(rèn)會(huì)讀取文件名為application.properties的資源文件,所以我們把jdbc.properties名稱(chēng)改為application.properties
2)在JdbcConfiguration中使用這個(gè)屬性:
-
通過(guò)@EnableConfigurationProperties(JdbcProperties.class)來(lái)聲明要使用JdbcProperties這個(gè)類(lèi)的對(duì)象
-
然后你可以通過(guò)以下方式在JdbcConfiguration類(lèi)中注入JdbcProperties:
-
@Autowired注入
構(gòu)造函數(shù)注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {private JdbcProperties jdbcProperties;public JdbcConfiguration(JdbcProperties jdbcProperties){this.jdbcProperties = jdbcProperties;}@Beanpublic DataSource dataSource() {// 略}}@Bean方法的參數(shù)注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {@Beanpublic DataSource dataSource(JdbcProperties jdbcProperties) {// ...} }本例中,我們采用第三種方式。
大家會(huì)覺(jué)得這種方式似乎更麻煩了,事實(shí)上這種方式有更強(qiáng)大的功能,也是SpringBoot推薦的注入方式。兩者對(duì)比關(guān)系:
優(yōu)勢(shì):
-
Relaxed binding:松散綁定
-
不嚴(yán)格要求屬性文件中的屬性名與成員變量名一致。支持駝峰,中劃線,下劃線等等轉(zhuǎn)換,甚至支持對(duì)象引導(dǎo)。比如:user.friend.name:代表的是user對(duì)象中的friend屬性中的name屬性,顯然friend也是對(duì)象。@value注解就難以完成這樣的注入方式。
-
meta-data support:元數(shù)據(jù)支持,幫助IDE生成屬性提示(寫(xiě)開(kāi)源框架會(huì)用到)。
-
更優(yōu)雅的注入
事實(shí)上,如果一段屬性只有一個(gè)Bean需要使用,我們無(wú)需將其注入到一個(gè)類(lèi)(JdbcProperties)中。而是直接在需要的地方聲明即可:
@Configuration public class JdbcConfiguration {@Bean// 聲明要注入的屬性前綴,SpringBoot會(huì)自動(dòng)把相關(guān)屬性通過(guò)set方法注入到DataSource中@ConfigurationProperties(prefix = "jdbc")public DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();return dataSource;} }我們直接把@ConfigurationProperties(prefix = "jdbc")聲明在需要使用的@Bean的方法上,然后SpringBoot就會(huì)自動(dòng)調(diào)用這個(gè)Bean(此處是DataSource)的set方法,然后完成注入。使用的前提是:該類(lèi)必須有對(duì)應(yīng)屬性的set方法!
總結(jié)
以上是生活随笔為你收集整理的springboot属性注入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 优化入门程序
- 下一篇: springboot的自动配置原理