在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中