spring应用手册-IOC(注解实现)-(15)-@Conditional注解

    科技2023-12-15  98

    戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注

    @Conditional注解

    spring应用手册(第二部分)

    源码:

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

    @Conditional可以注解在由spring管理的类上方和@bean注解的方法上方。

    主要作用是配置一些注册bean对应的条件,如果满足条件就注册bean,如果不满足就不进行bean的注册。

    我看到 @Conditional属性value是一组Condition的类型数组。

    我们再来看看Condition源码:

    package org.springframework.context.annotation; @java.lang.FunctionalInterface public interface Condition { boolean matches(org.springframework.context.annotation.ConditionContext conditionContext, org.springframework.core.type.AnnotatedTypeMetadata annotatedTypeMetadata); }

    该接口中只有一个metches方法,返回true说明条件成立,返回false说明条件不成立。

    我们可以自己实现一个。

    看案例:

    我们自己实现一个Condition。

    /** * @author 戴着假发的程序员 * * @description */ public class WindosCondition implements Condition { /** * * @param conditionContext 判断条件的上下文环境,可以获取环境对象,和工厂对象 * @param annotatedTypeMetadata 注解所在位置的注释信息 * @return */ @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { //获取环境对象 Environment environment = conditionContext.getEnvironment(); //判断环境的名字 if(environment.getProperty("os.name").contains("Windows")){ return true; } return false; } }

    在AuthorDAO上添加配置: 测试: 修改条件,再测试。

    Processed: 0.013, SQL: 8