1.@ConditionalOnBean(A.class)
解释: 主要作用就是当容器中有A这个类的bean的时候才创建被修饰的方法当中的bean, 如下, 当容器中有ApplicationRunnerTest这个类的bean时, 配置类中的test1方法会生效, 反之就是与它相反的 @ConditionalOnMissingBean(ApplicationRunnerTest.class)生效, 意思就是当容器中没有这类bean的时候创建这个bean.
@Configuration
public class ComputerConfig {
@ConditionalOnBean(ApplicationRunnerTest.class)
@Bean("book")
public computer test1(){
return new computer("笔记本电脑");
}
@ConditionalOnMissingBean(ApplicationRunnerTest.class)
@Bean("pat")
public computer test2(){
return new computer("台式电脑");
}
}
2.ConfigurationProperties注解
作用: 批量进行@value注解从配置文件给属性进行赋值。
@value注解一个个赋值,当需要赋值的属性比较多的时候会比较麻烦, 可以使用ConfigurationProperties注解将前缀名相同的配置信息注入到属性当中,具体用法。
在配置文件中定义两个以annotation.test开头的注解
在配置类上面添加注解,在注解中指定前缀名字
在类中命名属性名字, 并且属性名字要和配置文件中的名字一样
添加get,set方法,否则无法完成注入
**3.@PostConstruct
该注解的主要作用是在项目启动的时候执行一下需要执行的方法, 一般是一些需要初始化的方法, 比如下图, 执行了一个创建数据库的方法.
执行的顺序: Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
3.@ConditionalOnProperty
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
// 数组,获取对应property名称的值,与name不可同时使用
String[] value() default {};
// 配置属性名称的前缀,比如spring.http.encoding
String prefix() default "";
// 数组,配置属性完整名称或部分名称
// 可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用
String[] name() default {};
// 可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
String havingValue() default "";
// 缺少该配置属性时是否可以加载。如果为true,没有该配置属性时也会正常加载;反之则不会生效
boolean matchIfMissing() default false;
}