Spring - @Conditional全解

简介: Spring - @Conditional全解

20210403104921695.png

作用

必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效


扩展注解


image.png


Code


20210403114447589.png


Bean1 Bean2

public class Bean1 {
    public Bean1() {
        System.out.println("我是Bean1的构造方法");
    }
}


public class Bean2 {
    public Bean2() {
        System.out.println("我是Bean2的构造方法");
    }
}


自定义比较规则

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class ArtisanCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //判断容器中是否有bean1的组件
        if(context.getBeanFactory().containsBean("bean1")) {
            return true;
        }
        return false;
    }
}


配置类

import com.tuling.testconditional.compent.Bean1;
import com.tuling.testconditional.compent.Bean2;
import com.tuling.testconditional.condition.ArtisanCondition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
public class MainConfig {
    @Bean
    public Bean1 bean1() {
        return new Bean1();
    }
  // 如果满足ArtisanCondition中定义的规则,就实例化Bean2 
    @Bean
    @Conditional(value = ArtisanCondition.class) 
    public Bean2 bean2() {
        return new Bean2();
    }
}


测试类

import com.tuling.testconditional.config.MainConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
        for(String beanName:ctx.getBeanDefinitionNames()) {
            System.out.println("beanName:"+beanName);
        }
    }
}


20210403114559475.png


为了测试效果


20210403114729759.png


重新测试

20210403114802761.png


如何校验自动配置类是否生效


配置文件中增加

启用 debug=true属性;来让控制台打印自动配置报告

相关文章
|
8月前
|
Java 应用服务中间件 Spring
【Spring Boot 源码学习】@Conditional 条件注解
【1月更文挑战第8天】本篇介绍 @Conditional 条件注解及其衍生注解
194 3
【Spring Boot 源码学习】@Conditional 条件注解
|
7月前
|
Java Spring 容器
在 Spring Boot 中,条件装配(Conditional Configuration)和条件注解(Conditional Annotations)
在 Spring Boot 中,条件装配(Conditional Configuration)和条件注解(Conditional Annotations)
140 1
|
Java API 文件存储
Spring很常用的@Conditional注解的使用场景和源码解析
今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中,如果不满足条件,则不进行注册,这个注解在SpringBoot中衍生出很多注解,比如@ConditionalOnProperty,@ConditionalOnBean,@ConditionalOnClass等等,在SpringBoot中,这些注解用得很多。
155 0
|
Kubernetes 负载均衡 Cloud Native
Spring Cloud Kubernetes使用全解(一)—官方原版
Spring Cloud Kubernetes使用全解(一)—官方原版
12490 2
|
缓存 Java Linux
Spring框架中的@Conditional系列注解
Spring框架中的@Conditional系列注解
146 0
|
Java Spring 容器
【框架源码】Spring源码核心注解@Conditional原理及应用
【框架源码】Spring源码核心注解@Conditional原理及应用
【框架源码】Spring源码核心注解@Conditional原理及应用
|
自然语言处理 SpringCloudAlibaba Java
Spring条件装配注解:@Conditional及其衍生扩展注解
**条件装配**是`Spring Boot`一大特点,根据是否满足指定的条件来决定是否装配 Bean ,做到了动态灵活性,starter的自动配置类中就是使用@Conditional及其衍生扩展注解@ConditionalOnXXX做到了自动装配的
131 0
|
人工智能 Java 容器
Spring中@Conditional注解详解
Spring中@Conditional注解详解
|
Kubernetes 负载均衡 安全
Spring Cloud Kubernetes使用全解(二)—官方原版
Spring Cloud Kubernetes使用全解(二)—官方原版
697 0
|
Java Spring 容器
Spring - @CompentScan全解
Spring - @CompentScan全解
132 0