@ConfigurationProperties
转载https://www.cnblogs.com/slowcity/p/9097969.html
@ConfigurationProperties | @value | |
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
所谓松散语法也就是属性命名规则(Relaxed binding)
- person.firstName:使用标准方式 - person.first-name:大写用- - person.first_name:大写用_ - PERSON_FIRST_NAME: 系统属性推荐使用这种写法
@ConfigurationProperties支持松散语法 @Value不支持松散语法
application.properties文件中有字段 persion.first-name
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String firstName;
}
JSR303数据校验(@Validation)
@ConfigurationProperties @Validated 支持 @Value不支持
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Email;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@ConfigurationProperties
@Validated
public class Properties {
@NotNull
private String userName;
@Email
private String email;
}
SpEl
@ConfigurationProperties不支持EL表达式
application.properties文件中有字段 person.userAge=12
userAge = 12 //可以
userAge = #{2*6} //EL表达式不支持
@Value支持EL表达式
1 |
|
使用原则:在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;如果专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@EnableConfigurationProperties
这个注解可以提供一种方便的方式来将带有@ConfigurationProperties注解的类注入为Spring容器的Bean
转载https://blog.csdn.net/zknxx/article/details/79183698
@Condition
我的这篇https://blog.csdn.net/u014203449/article/details/86559350 有讲@Condition注解的使用。
一些根据Condition的相关注解:
转载https://www.cnblogs.com/yixianyixian/p/7346894.html
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)
后续会继续补充
另一种总结
@ConditionalOnClass:该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类;
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。.