@Conditional 条件装配

@Conditional 条件装配
@Conditional是spring Framework提供的一个核心注解, 作用是提供一个自动装配的条件约束,一般与@configuation 和@Bean配合使用

代码:
Conditional代码改注解可以接收一个Condition数组

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
    Class<? extends Condition>[] value();
}

Condition是一个函数式接口,提供了matches方法,返回true表示可以注入Bean

@FunctionalInterface
public interface Condition {
    boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2);
}

demo
定义condition

public class MyCondition implements Condition {

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        String os=conditionContext.getEnvironment().getProperty("os.name");
        if (os.contains("Windows"))
        {
            return  true;
        }
        return false;
    }
}

定义类

public class MyBeanClass {

    public String getName()
    {
        return "a";
    }
}

定义条件Bean

@Configuration
public class MyConditionConfig {

    @Bean
    @Conditional(MyCondition.class)
    public MyBeanClass myBeanClass()
    {
        return new MyBeanClass();
    }
}

启动测试

    public static void main(String[] args) {
        ConfigurableApplicationContext context= SpringApplication.run(Application.class,args);
        MyBeanClass firstClass=context.getBean(MyBeanClass.class);
        System.out.println(firstClass.getName());
    }

spring boot中的@Conditional
做了扩展提供了更简单的使用形式
ConditionalOnBean/ConditionalOnMissingBean下存在指定类或者不存在某个Bean时进行Bean加载
ConditaionalOnClass/ConditionalOnMissingClass:classpath下存在指定类或者不存在指定类时进行Bean加载
ConditionalOnCloudPlatform 只有运行在指定的云平台上才加载指定的bean
ConditionOnJava 只有运行在指定版本的Java才会加载Bean
ConditionalOnProperty 系统中指定属性有对应的值才加载Bean
ConditionalOnResource 要加载的Bean依赖指定的资源是否存在classpath中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值