【无标题】


@Conditional及其派生注解

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

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

value: class数组,并且继承Condition接口

public class WindowsCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //获得当前系统名
        String property = conditionContext.getEnvironment().getProperty("os.name");
        //包含Windows则说明是windows系统,返回true
        return property != null && property.contains("Windows");
    }
}
public class LinuxCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //获得当前系统名
        String property = conditionContext.getEnvironment().getProperty("os.name");
        //包含Linux则说明是Linux系统,返回true
        return property != null && property.contains("Linux");
    }
}
@Configuration
public class BeanConfig{
  @Bean("windows)
  @Conditional(WindowsCondition.class)
  public System widowsSystem(){
    return new System("Windows");
  }      
  
  @Bean("linux")
  @Conditional(LinuxCondition.class)
  public System liunxSystem(){
    return new System("Linux");
  }

上述代码中,@Conditional注解作用域在 方法 上,表述在指定操作系统中,windows和linux只有一个bean会被加载。如果是Windows操作系统,则会加载windows bean;如果是Linux操作系统,则会加载linux bean。

@Conditional(WindowsCondition.class)
@Configuration
public class BeanConfig{
  @Bean("windows)
  public System widowsSystem(){
    return new System("Windows");
  }      
  
  @Bean("linux")
  public System liunxSystem(){
    return new System("Linux");
}

上述代码中,@Conditional注解作用域在 上,表述在Windows操作系统中,windows和linux这两个bean都会被加载;在Linux系统中,windows和linux这两个bean都不会被加载。

@Conditional({WindowsCondition.class,LiunxCondition.class})
@Configuration
public class BeanConfig{
  @Bean("windows)
  public System widowsSystem(){
    return new System("Windows");
  }      
  
  @Bean("linux")
  public System liunxSystem(){
    return new System("Linux");
}

上述代码中,@Conditional注解value为WindowsCondition.class,LiunxCondition.class,表述当两个条件全都满足时,类下配置的bean才会被加载(这里一个操作系统不会满足两个条件,所以显然这两个bean都不会被加载)。


其他派生注解
  • @ConditionalOnBean: 表述指定bean存在时当前bean才会加载
  • @ConditionalOnMissingBean: 表述指定bean不存在时当前bean才会加载
  • @ConditionalOnClass: 表述指定类存在时当前bean才会加载
  • @ConditionalOnMissingClass: 表述指定类不存在时当前bean才会加载
  • @ConditionalOnProperty: 表述指定配置存在时当前bean才会加载
  • @ConditionalOnJava: 表述当前java版本为指定范围内时当前bean才会加载
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值