注解篇一

1、@Conditonal注解:(https://blog.csdn.net/xcy1193068639/article/details/81491071

按照一定条件判断,满足条件的给容器注册bean,也就是根据当前环境或者容器情况来注入bean

//此注解可以标注在类和方法上
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME) 
@Documented
public @interface Conditional {
    Class<? extends Condition>[] value();
}

从代码中可以看到,需要传入一个Class数组,并且需要继承Condition接口:

/**
ConditionContext:调用各种方法,获取信息来看满足条件的上下文环境
AnnotatedTypeMetadata:注解所在位置的注释信息
*/
public interface Condition { boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2); }

  Condition是个接口,要实现matches方法,如果返回true则注入bean,否则不注入bean。

注意点:

1.1、该接口可以在方法和类上

1.2、该接口可以传入一个类数组

当类数组中所有类返回是ture,才会注入bean。否则有一个是false都不注入。

1.3、conditionContext是springboot中ConditionalOnxxx扩展的基础

2、假设有两个bean    A和B

@ConditonalOnMissingBean:

当容器中没有A这个bean,则注入B这个bean,如果有A这个bean,则不注入这个B这个Bean

@ConditionalOnBean:

当容器中没有A这个Bean时,则不注入B这个Bean,如果有A这Bean时,注入B这个Bean

这两个注解刚好作用相反

原文地址:https://www.cnblogs.com/yiyezhiqiuwuchen/p/13556672.html