日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

springboot属性注入

發(fā)布時(shí)間:2024/4/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot属性注入 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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注入

@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {@Autowiredprivate JdbcProperties jdbcProperties;@Beanpublic DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(jdbcProperties.getUrl());dataSource.setDriverClassName(jdbcProperties.getDriverClassName());dataSource.setUsername(jdbcProperties.getUsername());dataSource.setPassword(jdbcProperties.getPassword());return dataSource;}}

構(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。