@Conditional条件装配

简介: @Conditional条件装配

@Conditional条件装配

@Conditional 提供自动装配的条件约束,一般与@Configuration和@Bean配合使用

根据该注解配置的条件决定是否实现Bean的装配

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {

   /**
    * All {@link Condition Conditions} that must {@linkplain Condition#matches match}
    * in order for the component to be registered.
    */
   Class<? extends Condition>[] value();

}

Condition是一个接口 ,提供matches方法,返回true表示可以注入Bean,返回false表示不满足条件,不能注入Bean

自定义Condition

ConditionConfig

@Configuration
public class ConditionConfig {

    @Bean
    @Conditional(XpCondition.class)
    public BeanClass beanClass(){
        return new BeanClass();
    }
}
public class XpCondition implements Condition{

    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //此处进行条件判断,如果返回true,表示需要加载该配置类或者Bean
        //否则,表示加载
        String os=conditionContext.getEnvironment().getProperty("os.name");
        if(os.contains("Linux")){
            return true;
        }
        return false;
    }
}
public class ConditionMain {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ConditionConfig.class);
        BeanClass beanClass=context.getBean(BeanClass.class);
        System.out.println(beanClass);
    }
}

XpCondition的matches返回true时候,才会将BeanClass装载到Spring Ioc容器中

SpringBoot针对Conditional做了扩展:

  • ConditionalOnBean ConditionalOnMissingBean:容器中存在某个类或不存在某个Bean时进行Bean装载
  • ConditionalOnClass ConditionalOnMissingClass:classpath下存在指定类或者不存在指定类时进行Bean装载
  • ConditionalOnResource:指定资源是否存在于classpath下
  • ConditionalOnProperty: 系统中指定的对应的属性是否有对应的值。

批量自动装配条件配置

SpringBoot 提供了spring-autoconfigure-metadata.properties实现批量自动装配条件配置

约定优于配置:

  • 配置文件的路径和名称必须是META-INF/spring-autoconfigure-metadata.properties
  • 配置文件中key的配置格式:自动配置类的类全路径名.条件=值

降低了SpringBoot启动时间,过滤发生在配置类的装配之前,降低Spring Boot启动时装载Bean的耗时。

相关文章
|
3天前
|
Java
SpringBoot之@Conditional衍生条件装配详解
SpringBoot之@Conditional衍生条件装配详解
|
5月前
|
Java Spring
SpringAOP中Aspect优先级与切面表达式详解
SpringAOP中Aspect优先级与切面表达式详解
66 0
|
7月前
|
缓存 Java Linux
Spring框架中的@Conditional系列注解
Spring框架中的@Conditional系列注解
77 0
|
9月前
|
自然语言处理 SpringCloudAlibaba Java
Spring条件装配注解:@Conditional及其衍生扩展注解
**条件装配**是`Spring Boot`一大特点,根据是否满足指定的条件来决定是否装配 Bean ,做到了动态灵活性,starter的自动配置类中就是使用@Conditional及其衍生扩展注解@ConditionalOnXXX做到了自动装配的
78 0
|
11月前
|
Java
SpringBoot AOP @Pointcut切入点execution表达式排除类中的具体方法
SpringBoot AOP @Pointcut切入点execution表达式排除类中的具体方法
341 0
|
XML Java 数据格式
AOP:组合使用多个切入点表达式(Combining pointcut expressions)
AOP:组合使用多个切入点表达式(Combining pointcut expressions)
1083 0
|
Java Spring
Spring 条件注解 @Conditional 使用及其底层实现
概述 @Conditional 是 Spring 4.0 提出的一个新的注解,可以用在类或方法上,当标注的对象满足所有的条件时,才能注册为 Spring 中的 bean。条件由使用 Spring 的用户自己指定,例如指定的 bean 不存在时注册、不同的环境注册不同的bean 等。
109 0
|
Java Linux Windows
Spring注解(四):@Conditional根据条件注册组件
在进行spring注解开发时,如果对于某个bean生成了多个实例,在进行组件注册的时候会全部注入到IOC的容器当中,比如:
135 0
Spring注解(四):@Conditional根据条件注册组件
|
Java Spring
Pointcut 表达式
1. AOP 概念篇 今天介绍 Pointcut 的表达式
165 0
|
消息中间件 IDE Java
Spring Boot @Condition 注解,组合条件你知道吗
Spring Boot @Condition 注解,组合条件你知道吗
Spring Boot @Condition 注解,组合条件你知道吗