美文网首页
spring boot的条件注解

spring boot的条件注解

作者: 兴浩 | 来源:发表于2019-06-01 20:13 被阅读0次

1.spring boot的@ConditionalOn注解

参考:https://www.jianshu.com/p/30b2ff83ffeb

在spring boot中,@ConditionalOn系列注解都是自定义的条件注解,使用非常频繁.
参考:https://www.cnblogs.com/yixianyixian/p/7346894.html

2.SpringBootCondition

Condition的matches方法原生通过返回boolean值来进行条件判断,SpringBootCondition做了功能增强,在返回boolean值的基础上添加了日志信息的输出,ConditionOutcome类作为条件判断的结果输出,具体由子类来实现返回

    @Override
    public final boolean matches(ConditionContext context,
            AnnotatedTypeMetadata metadata) {
        String classOrMethodName = getClassOrMethodName(metadata);
            ConditionOutcome outcome = getMatchOutcome(context, metadata);
            logOutcome(classOrMethodName, outcome);
            return outcome.isMatch();
    }

    public abstract ConditionOutcome getMatchOutcome(ConditionContext context,
            AnnotatedTypeMetadata metadata);

3.@ConditionalOnJava注解

以@ConditionalOnJava注解作为示例

    @Configuration
    @ConditionalOnJava(JavaVersion.EIGHT)
    static class Java8Required {

        @Bean
        String foo() {
            return "foo";
        }

    }

其内部实现的条件判断类是OnJavaCondition

    protected ConditionOutcome getMatchOutcome(Range range, JavaVersion runningVersion,
            JavaVersion version) {
        boolean match = isWithin(runningVersion, range, version);
        return new ConditionOutcome(match, "message");
    }

    private boolean isWithin(JavaVersion runningVersion, Range range,
            JavaVersion version) {
        if (range == Range.EQUAL_OR_NEWER) {
            return runningVersion.isEqualOrNewerThan(version);
        }
        if (range == Range.OLDER_THAN) {
            return runningVersion.isOlderThan(version);
        }
    }

这里先对SpringBootCondition的逻辑有一个了解

参考:
https://www.jianshu.com/p/1d0fb7cd8a26

相关文章

网友评论

      本文标题:spring boot的条件注解

      本文链接:https://www.haomeiwen.com/subject/dhaatctx.html