Spring Boot的属性注入

在SpringBoot中,提供了一种不同于spring的新的属性注入方式,支持各种java基本数据类型及复杂类型的注入
1.新建配置类

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    // ... 略
    // getters 和 setters
}
  • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
  • prefix="jdbc"读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致
  • 属性文件为resources/application.properties,这是SpringBoot默认读取的属性文件

2.在JdbcConfig中使用这个属性

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

    @Bean
    public DataSource dataSource(JdbcProperties jdbc) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        return dataSource;
    }
}
  • @EnableConfigurationProperties(JdbcProperties.class)声明要使用JdbcProperties这个类的对象,实际上prefix声明对象名字
  • 注入JdbcProperties的三种方式
    @Autowired注入
@Autowired
private JdbcProperties prop;

构造函数注入

private JdbcProperties prop;
public JdbcConfig(Jdbcproperties prop){
        this.prop = prop;
}

声明有@Bean的方法参数注入

@Bean
public Datasource dataSource(JdbcProperties prop){
        // ...
}
无需配置类的注入方法

如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需要的地方声明即可

@Configuration
public class JdbcConfig {
    
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

@ConfigurationProperties(prefix = "jdbc")声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中

你可能感兴趣的:(Spring Boot的属性注入)