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上添加配置:

测试:

修改条件,再测试。

posted @ 2020-10-09 08:10  戴着假发的程序员0-1  阅读(188)  评论(0编辑  收藏  举报