2.15 @Conditional注解
戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
[查看视频教程]
源码:
1 package org.springframework.context.annotation; 2 3 @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) 4 @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) 5 @java.lang.annotation.Documented 6 public @interface Conditional { 7 java.lang.Class<? extends org.springframework.context.annotation.Condition>[] value(); 8 }
@Conditional可以注解在由spring管理的类上方和@bean注解的方法上方。
主要作用是配置一些注册bean对应的条件,如果满足条件就注册bean,如果不满足就不进行bean的注册。
我看到 @Conditional属性value是一组Condition的类型数组。
我们再来看看Condition源码:
1 package org.springframework.context.annotation; 2 3 @java.lang.FunctionalInterface 4 public interface Condition { 5 boolean matches(org.springframework.context.annotation.ConditionContext conditionContext, org.springframework.core.type.AnnotatedTypeMetadata annotatedTypeMetadata); 6 }
该接口中只有一个metches方法,返回true说明条件成立,返回false说明条件不成立。
我们可以自己实现一个。
看案例:
我们自己实现一个Condition。
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 public class WindosCondition implements Condition { 7 /** 8 * 9 * @param conditionContext 判断条件的上下文环境,可以获取环境对象,和工厂对象 10 * @param annotatedTypeMetadata 注解所在位置的注释信息 11 * @return 12 */ 13 @Override 14 public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { 15 //获取环境对象 16 Environment environment = conditionContext.getEnvironment(); 17 //判断环境的名字 18 if(environment.getProperty("os.name").contains("Windows")){ 19 return true; 20 } 21 return false; 22 } 23 }
在AuthorDAO上添加配置:
测试:
修改条件,再测试。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员