条件导入(@Conditional)

David 2022-09-28 23:16:54
Categories: Tags:

 

参数

描述

value

指定注册的类class,默认为{},即当前类

 

 

子注解

说明

@ConditionalOnJava

系统的java版本是否符合要求

@ConditionalOnBean

容器中存在指定Bean

@ConditionalOnMissingBean

容器中不存在指定Bean

@ConditionalOnExpression

满足SpEl表达式指定

@ConditionalOnClass

系统中有指定类

@ConditionalOnMissing

系统值没有指定类

@ConditionalOnSingleCandidate

容器中只有一个指定的Bean,或者这个Bean是首选Bean

@ConditionalOnProperty

系统中指定的属性是否有指定的值

参数

描述

prefix

属性的字段前缀

name

属性的字段名

havingValue

属性的值

matchIfMissing

属性值未配置时,默认配置

 

@ConditionalOnResource

类路径下是否存在指定资源文件

@ConditionalOnWebApplication

当前是web环境

@ConditionalOnNotWebApplication

当前不是web环境

@ConditionalOnjindi

JNDI存在指定项

示例

@Configuration

public class PersonConfigure {

 

    @Bean(name="bill")

    @ConditionalOnClass({User.class})

    public Person person1(){

        return new Person("Bill Gates",62);

    }

}

 

 

 

自定义Condtional

示例

public class MyConditional implements Condition {

    @Override

    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {

        Environment environment = conditionContext.getEnvironment();

        String property = environment.getProperty("os.name");

        if(property.contains("Windows")){

            return true;

        }

        return false;

    }

}

 

@Configuration

public class PersonConfigure {

 

    @Bean(name="bill")

    @Conditional({MyConditional.class}) //如果满足MyConditional返回true,继续加载下面这个方法

    public Person person1(){

        return new Person("Bill Gates",62);

    }

}