【SpringBoot】SpringBoot屬性注入的四種方式

什麼是屬性注入?

屬性注入就是在實例化對象時,同時向對象中的屬性進行相應的賦值,就是給類中的屬性賦值。

第一步

在Resoures下面創建配置文件application.properties
寫入jdbc代碼:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc://127.0.0.1:3306/leyou
jdbc.username=root
jdbc.password=123

如何區分不同配置?
通過前綴,prefix=“jdbc”,第二步會用到。

第二步

配置類(JdbcProperties)定義相關屬性,使用 get、set方法定義。
注意:字段名和applicaiton.properties保持一致

@ConfigurationProperties(prefix = "jdbc")  //讀取application.properties中的jdbc相關配置
public class JdbcProperties {

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

第三步

開始注入
四種屬性注入:

1、@Autowired注入 (最常用)

@Configuration  //聲明一個類是一個java配置類,相當於一個xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)  //啓用JdbcProperties配置文件
public class JdbcConfiguration {

    @Autowired
    private JdbcProperties jdbcProperties;

    @Bean  //把方法的返回值注入到容器
    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  //聲明一個類是一個java配置類,相當於一個xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)  //啓用JdbcProperties配置文件
public class JdbcConfiguration {

    @Autowired
    private JdbcProperties jdbcProperties;

    public JdbcConfiguration(JdbcProperties jdbcProperties){
        this.jdbcProperties=jdbcProperties;
    }
    @Bean  //把方法的返回值注入到容器
    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;
    }
}

3、@Bean方法形參注入

@Configuration  //聲明一個類是一個java配置類,相當於一個xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)  //啓用JdbcProperties配置文件
public class JdbcConfiguration {

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

4、直接在@Bean方法上使用@ConfigurationProperties(prefix=“jdbc”) (最優雅的方式)

@Configuration  //聲明一個類是一個java配置類,相當於一個xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)  //啓用JdbcProperties配置文件
public class JdbcConfiguration {

    @Bean  //把方法的返回值注入到容器
    @ConfigurationProperties(prefix = "jdbc")  //讀取application.properties中的jdbc相關配置
    public DataSource dataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        return dataSource;
    }
}

總結

最常用的還是第一種注入方式,更符合我們平時的玩法。雖然第四種方式很優雅,但是它要保證配置有相應的set方法,所以他還是有一定侷限性的。

發佈了150 篇原創文章 · 獲贊 94 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章