Spring @Conditional注解原理解析

网友投稿 296 2022-12-21


Spring @Conditional注解原理解析

这篇文章主要介绍了Spring @Conditional注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

@Conditional是Spring4新提供的注解,它的作用是根据某个条件加载特定的bean。

我们需要创建实现类来实现Condition接口,这是Condition的源码

public interface Condition {

boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2);

}

所以我们需要重写matches方法,该方法返回boolean类型。

首先我们准备根据不同的操作系统环境进行对容器加载不同的bean,先创建Person

public class Person {

}

创建实现类linuxCondition和WindowCondiction,

LinuxCondition:

public class WindowCondiction implements Condition {

@Override

public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {

return true;

}

}

WindowCondiction:

public class LinuxCondition implements Condition {

@Override

public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatlqFWJTfhIedTypeMetadata) {

return true;

}

}

配置类:给相应的bean加上 @Conditional注解,里面的括号将返回boolean类型,返回true则加载bean

@Configuration

public class MainConfig {

@Profile("window")

@Conditional(WindowCondiction.class)

@Bean

public Person person01(){

return new Person("李思",30);

}

@Profile("linux")

@Conditional(LinuxCondition.class)

@Bean

public Person person02(){

return new Person("wangwu",35);

}

}

测试:现在是按照linux环境,@Profile注解先匹配linux的bean,再根据@Conditional 返回的类型判断是否加载bean,这里都设置返回true,所以应该打印

Person{name='wangwu', age=35}

public class CondictionTest {

@Test

public void test(){

//创建容器

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();

//设置需要激活的环境

applicationContext.getEnvironment().setActiveProfiles("linux");

//设置主配置类

applicationContext.register(MainProfileConfig.class);

//启动刷新容器

applicationContext.refresh();

String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);

for (String name : beanNamesForType){

System.out.println(name);

}

applicationContext.close();

}

}

如果把LinuxCondition的返回值该为false,会报找不到bean的异常

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.springbean.Person' available


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringMVC事件监听ApplicationListener实例解析
下一篇:Spring ApplicationListener监听器用法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~