Spring 创建条件化的bean(满足一定条件才会实例化该bean)

Spring 创建条件化的bean(满足一定条件才会实例化该bean)

  • 应用场景:
    • 要求在特定的环境变量下创建该bean
    • 希望某个bean被声明时候才会创建该bean
    • 希望一个或者多个bean只有在应用的类路径下包含特定的数据库才创建
  • 解决办法:
    • 利用Spring4.0里的注解@Conditional,他可以用在带有@Bean注解的方法上,如果给定的条件返回true,则创建该bean,否则就会忽略该bean的创建。
  • 例如:
    • 假如我们有一个名为Person的类,我们希望设置了isOk属性为true才会实例化Person对象,如果该属性值为false或者没有改属性则该类就会被忽略实例化
    • 代码如下:
@Bean
@Conditional(isOk.class)//指定一个实现了Condition的类,他会返回一个boolean值
public Person perosonBean(){
    return new Person();
}
//实现了Condition接口的类,作用就是判断是否满足条件
public class IsOk implements Condition{
    public boolean matches(ConditionContext context,AnotatedyTypeMetadata metadate){
        Environment evn = context.getEnvironment();
        return evn.containsProperty("isOk");
    }
}

ConditionContext 接口中有如下方法,具体解释如下:

Spring 创建条件化的bean(满足一定条件才会实例化该bean)_第1张图片

AnotatedyTypeMetadata 也是一个接口,它是用来检查带@Bean上还有其他的注解么,其中它中的一个方法isAnnotated()就是判断还有其他注解没。
重点内容 :Spring4.0中对@Profile注解进行了重构,他是基于@Conditional和Condition实现的

你可能感兴趣的:(spring)