@ConfigurationProperties
这个注解不仅可以为yml某个类注入还可以为第三方bean绑定属性
- 为yml某个类注入
只要将对应的yml类对象声明实体pojo并交给spring容器管理,再在类上使用@ConfigurationProperties绑定对应的类名即可
涉及到两个知识点,这个类对象要交给spring容器管理,则需要将它声明为bean对象,需要用@Conponent注解,第二个需要@ConfigurationProperties(“xxx”),指明为yml中哪个类(xxx)
- 使用@ConfigurationProperties为第三方bean绑定属性
DruidDataSource 作为第三方的bean它有一个属性为driverClassName
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
datasource:
driverClassName: com.mysql.jdbc.Driver
@EnableConfigurationProperties
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication {
}
//@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
}
注意:@EnableConfigurationProperties与@Component不能同时使用
在这里的两个代码其实是冲突的,如果2的注释被放开系统运行将会报错,因为ServerConfig 将被声明为两个同名的bean在spring容器中,这是不被允许的;@EnableConfigurationProperties(ServerConfig.class)代表开启ConfigurationProperties注解并按照括号里面的类进行注入并生成bean,所以是冲突的
@EnableConfigurationProperties不允许单独存在而没有()里面指明的类,这样也会报错找不到对应ServerConfig 的bean,当然这个编译时期就会报错idea会提示你@ConfigurationProperties(prefix = "servers")
解除使用@ConfigurationProperties注释警告
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
宽松绑定
@ConfigurationProperties绑定属性支持属性名宽松绑定
注意:宽松绑定不支持注解@Value引用单个属性的方式
绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
以下@ConfigurationProperties(prefix = "dataSource")会报错,因为绑定前缀命名命名规则