自勉,持续学习,@Conditional使用记录

需求:根据不同部署参数加载不同的代码逻辑

例如:业务区分国内和国外,两套代码有各自的不同之处。但是希望能通过一套代码实现。

先上代码:

  1. 通过system api 获取部署参数,然后提供两个方法,对参数进行简单的判断。
public class MyEnvConfig {
    private static final  String IS_OVERSEAS = System.getenv("isOverseas"); // 获取部署参数

    public static boolean isOverseas() {
        return "yes".equalsIgnoreCase(IS_OVERSEAS);
    }

    public static boolean isChinese() {
        return "no".equalsIgnoreCase(IS_OVERSEAS);
    }
}
  1. 自定义两个 condition 类实现 org.springframework.context.annotation
@Component
public class OverseasCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return MyEnvConfig.isOverseas();
    }
}
@Component
public class ChineseCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return MyEnvConfig.isChinese();
    }
}
  1. 最后我们通过@Conditional注解动态加载相关代码:
@Conditional(OverseasCondition.class)
public class OverseasLogic {
    //todo 国外的逻辑
}
@Conditional(ChineseCondition.class)
public class ChineseLogic {
    //todo 国内的逻辑
}

简单解释

项目部署时,读取到@Conditional注解,然后判断注解的括号中的类是否符合条件。如果符合(返回true)则加载该类,执行对应的方法,否则不加载该类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值