SpringBoot 的四種屬性注入方式


1.Autowired注入方式(以注入連接池為例)

application.properties 配置文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/springboot
jdbc.username=root
jdbc.password=root

1. 創建一個屬性讀取類:JdbcProperties

/**
 * 屬性讀取類
 *  prefix: 為application.properties文件中的前綴 
 */
@ConfigurationProperties(prefix = "jdbc")  //讀取配置文件,聲明一個類是讀取配置類
public class JdbcProperties {
    private String driverClassName;  //配置文件中的屬性名稱
    private String url;
    private String username;
    private String password;
   
    //get、set方法
}
  • 在類上通過@ConfigurationProperties注解聲明當前類為屬性讀取類

  • prefix="jdbc"讀取屬性文件中,前綴為jdbc的值。

  • 在類上定義各個屬性,名稱必須與屬性文件中 jdbc. 后面部分一致,並且必須具有 getter 和 setter 方法

  • SpringBoot默認會讀取文件名為 application.properties 的資源文件,所以配置文件名必須為 application.properties

2. 創建另一個類 JdbcConfiguration 使用這個屬性

  • 通過@EnableConfigurationProperties(JdbcProperties.class)來聲明要使用JdbcProperties這個類的對象

  • 然后你可以通過以下方式在 JdbcConfiguration 類中注入 JdbcProperties:

@Configuration //聲明一個類為Java配置類,相當於一個xml文件
@EnableConfigurationProperties(JdbcProperties.class)  //啟用屬性讀取類
public class JdbcConfiguration {
    @Autowired
    private JdbcProperties jdbcProperties;  //注入讀取類

    @Bean        //把方法返回值注入到spring容器
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
}

2. 構造函數注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    private JdbcProperties jdbcProperties;

    public JdbcConfiguration(JdbcProperties jdbcProperties){
        this.jdbcProperties = jdbcProperties;
    }

    @Bean
    public DataSource dataSource() {
        // 略
    }

}

3. @Bean方法的參數注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties) {
        // ...
    }
}

4. 把 @ConfigurationProperties(prefix = "jdbc") 聲明在需要使用的 @Bean 的方法上

然后 SpringBoot 就會自動調用這個 Bean(此處是DataSource)的 set 方法,然后完成注入。使用的前提是:該類必須有對應屬性的 set 方法.

@Configuration
public class JdbcConfiguration {
    
    @Bean
    // 聲明要注入的屬性前綴,SpringBoot會自動把相關屬性通過set方法注入到DataSource中
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

參考資源

  1. https://www.jianshu.com/p/add1faa168b4

  2. https://www.cnblogs.com/cqyp/p/13229957.html

每天學習一點點,每天進步一點點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM