@ConfigurationProperties是Spring框架提供的一个注解,其作用是把属性文件配置参数映射到java的bean属性中。这个功能非常强大,可以很方便的帮助我们处理配置文件和Java对象的属性值注入,在Spring及SpringBoot框架或者其他开源框架中这个注解使用频率非常的高,非常典型的案例就是常用于数据源的配置。想必很多开发同学用过这个注解或者看到过这个注解的用法,但是你真的了解这个注解有几种使用场景吗?是不是看到不同框架可以这样用,也可以那样用觉得有点迷惑?本文将为你介绍@ConfigurationProperties注解的几个正确用法,彻底解决你的疑惑,保证提高你在面试官面前添加加分项。
?使用方法一
@ConfigurationProperties注解作用在一个普通的类中,这是一个普通的Java类
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSoureProperties {
private String url;
private String username;
private String password;
}属性文件配置:
?spring.datasource.druid.url=jdbc:mysql://:/test?
spring.datasource.druid.username=test
spring.datasource.druid.password=test123然后在配置类使用这个配置bean
@Configuration
@EnableConfigurationProperties({DruidDataSoureProperties.class})
public class DruidDataSourceConfig {
// 直接注入
@Autowired
DruidDataSoureProperties dataSoureProperties;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
dataSource.setUrl(dataSoureProperties.getUrl());
dataSource.setUsername(dataSoureProperties.getUsername());
dataSource.setPassword(dataSoureProperties.getPassword());
return dataSource;
}
//或者可以这样
@Bean
public DataSource dataSource( DruidDataSoureProperties dataSoureProperties) {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
dataSource.setUrl(dataSoureProperties.getUrl());
dataSource.setUsername(dataSoureProperties.getUsername());
dataSource.setPassword(dataSoureProperties.getPassword());
return dataSource;
}
}通过@
EnableConfigurationProperties 注解后可以将一个带有@ConfigurationProperties注解的普通类与配置文件参数自动映射,从而交给sping容器实例化可以正常的获取到bean.
?使用方法二
@ConfigurationProperties 注解作用在@Configuration或@Component注解的类上,其实@Configuration是一个复合注解,他包含了@Component注解,如下面的java类:
@ConfigurationProperties(prefix = "spring.datasource")
@Configuration
public class DataSoureProperties {
private String url;
private String username;
private String password;
}这种方式和第一种的区别就是多了一个@Configuration配置类注解,这就可以不再需要使用@
EnableConfigurationProperties注解了,具体使用方式如下:
@Configuration
public class DruidDataSourceConfig {
@Autowired
DruidDataSoureProperties dataSoureProperties;
}?使用方法三
在@Configuration注解的类中带有@bean注解的方法上使用@ConfigurationProperties注解,可以把属性映射到方法返回的对象属性中,如以下配置可以把前缀为spring.datasource属性文件参数注入到DataSource属性中
@Configuration
public class MyDataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return dataSource;
}
}总结
第一种方式多用与外部模块,因为外部模块的包名和自己项目包名一般不一样,spingboot扫描不到属性配置,所以需要在本项目的环境中配合@
EnableConfigurationProperties 注解来完成容器化。
第二种方式刚好是第一种的互补,如果是在一个项目中,可以直接使用第二种方式,因为包的扫描可以直接扫描到本项目中的@Configuration注解。
第三种比较灵活,不需要额外再创建一个配置类,但是如果需要多次注入属性代码就会重复,也就是属性配置类不能复用
以上就是@ConfigurationProperties 这个注解的三种不同使用方式以及他们的区别,具体在不同场合使用不同的方式。
