SpringBoot自学好几天 中途开始写笔记 @Conditional && 自动配置报告 20190119

版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载请在明显处标明出处! https://blog.csdn.net/qq_36291682/article/details/86552050

@Conditinal派生注解

作用:必须是@Conditonal指定的条件成立,才给容器中添加组件(Bean),配置类里边的所有内容才生效。
Conditional 是由 SpringFramework 提供的一个注解,位于 org.springframework.context.annotation 包内,定义如下:

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

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

Conditon接口:

package org.springframework.context.annotation;

import org.springframework.core.type.AnnotatedTypeMetadata;

@FunctionalInterface
public interface Condition {
    boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2);
}

matches方法参数是ConditionContext ,他可以获取Spring的以下信息:

public interface ConditionContext {
    BeanDefinitionRegistry getRegistry();

    @Nullable
    ConfigurableListableBeanFactory getBeanFactory();

    Environment getEnvironment();

    ResourceLoader getResourceLoader();

    @Nullable
    ClassLoader getClassLoader();
}

当一个 Bean 被 Conditional 注解修饰时,Spring容器会对所有 Condition 接口的 matches() 方法进行判断,只有当其中所有 Condition 接口的 matches()方法都为 ture 时,才会创建 Bean 。关于这个Spring的注解,我下载了一个视频31 尚硅谷 Spring注解驱动开发 这里先简单了解一下 等这个SpringBoot视频看完之后去看那个视频,对Spring的注解有进一步了解

SpringBoot扩展注解:
在这里插入图片描述

  • @ConditionalOnJava:当前系统的JAVA版本是否符合

  • @ConditionalOnBean:当容器里有指定Bean的条件下

  • @ConditionalOnMissingBean:当容器里没有指定Bean的情况下

  • @ConditionalOnExpression:基于SpEL表达式作为判断条件

  • @ConditionalOnClass:当类路径下有指定类的条件下

  • @ConditionalOnMissingClass:当类路径下没有指定类的条件下

  • @ConditionalOnSingleCandidate:当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean

  • @ConditionalOnProperty:指定的属性是否有指定的值

  • @ConditionalOnResource:类路径是否有指定的值

  • @ConditionalOnWebApplication:当前项目是Web项目的条件下。

  • @ConditionalOnNotWebApplication:当前项目不是Web项目的条件下

  • @ConditionalOnJndi:在JNDI存在的条件下差在指定的位置

自动配置类在一定条件下才能生效。我们要一个一个打开这些配置类,去里边看看条件是否符合,比如RabbitAutoConfiguration 我们需要点进去 看看是否他的条件都满足,满足的话他才能生效。
在这里插入图片描述
在这里插入图片描述
这样太麻烦了,我们可以在配置文件中配置一个属性:
debug=true
开启SpringBoot的debug模式 项目启动的时候控制台就会打印自动配置报告 这样我们就知道哪些自动配置类生效了:
在这里插入图片描述
在这里插入图片描述
自定义Conditional

猜你喜欢

转载自blog.csdn.net/qq_36291682/article/details/86552050