时间:2021-05-19
@Conditional 是 SpringFramework 的功能, SpringBoot 在它的基础上定义了 @ConditionalOnClass , @ConditionalOnProperty 的一系列的注解来实现更丰富的内容。
Spring提供了多种实现化条件化配置的选择,如ConditionalOnProperty和ConditionalOnClass等。
用法如下:
@ConditionalOnProperty(prefix = "pkslow", name = "service", havingValue = "larry")还有:
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)@ConditionalOnNotWebApplication(不是web应用)但有时候我们需要更灵活的自定义条件配置,这时可以通过继承SpringBootCondition类来实现。
自己根据需求实现自己的判断逻辑,我的实现如下:
public class PkslowCondition extends SpringBootCondition { @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { BindResult<List<String>> maxBindResult = Binder.get(context.getEnvironment()).bind("pkslow.condition.max", Bindable.listOf(String.class)); BindResult<List<String>> minBindResult = Binder.get(context.getEnvironment()).bind("pkslow.condition.min", Bindable.listOf(String.class)); if ( (maxBindResult.isBound() && !maxBindResult.get().isEmpty()) && (minBindResult.isBound() && !minBindResult.get().isEmpty()) ) { List<String> maxs = maxBindResult.get(); List<String> mins = minBindResult.get(); int max = Integer.parseInt(maxs.get(0)); int min = Integer.parseInt(mins.get(0)); if (max < 1000 && min > 0) { return ConditionOutcome.match(); } } return ConditionOutcome.noMatch("pkslow.condition.max/pkslow.condition.min not matches"); }}表示需要有配置属性pkslow.condition.max/pkslow.condition.min才会生效,并且要求max<1000且min>0。
完成自定义的条件类后,就可以使用它来限定一个配置类是否要生效了,使用如下:
@Conditional(PkslowCondition.class)@Configurationpublic class PkslowConfig { @PostConstruct public void postConstruct() { System.out.println("PkslowConfig called"); }}代码请查看:https://github.com/LarryDpk/pkslow-samples
以上就是如何使用SpringBootCondition更自由地定义条件化配置的详细内容,更多关于SpringBootCondition 定义条件化配置的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
ZBrush给用户提供了许多的常用笔刷,我们可以使用这些笔刷自由地发挥创意。为了让雕刻速度更快,模型刻画更细致我们常常也会创建自定义笔刷,今天主要教大家在ZBr
微软为Windows8.1添加了更多个性化的定制体验,用户可以更自由地选择界面效果了。响应速度和电池寿命。IE11支持阅读视图(ReadingView),它带来
越狱完成后,就可以自由地安装插件和软件源啦,享受海量的免费软件和各种新奇的插件,更深入更透彻地完成苹果系列,但是前提就是如何添加源,如何安装插件,有什么插件不能
去边界化的文本,即不给文本设定框架区域,文本的排版可以跨越不同的区域设计,让文本在网站页面更自由地表达。网站建设使用去边界化的文本打破了页面规则束缚的设计,当人
python软件免费吗?python是免费的,是自由、开放源码的软件之一,在python官网可以免费下载,使用者可以自由地发布这个软件的拷贝、阅读它的源