Spring @Conditional注解原理解析
作者:闻窗 时间:2022-10-04 16:09:51
这篇文章主要介绍了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 annotatedTypeMetadata) {
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
来源:https://www.cnblogs.com/tdyang/p/11878735.html
标签:spring,@,conditional,注解
0
投稿
猜你喜欢
idea项目的左侧目录没了如何设置
2022-03-21 15:45:43
Repeater中添加按钮实现点击按钮获取某一行数据的方法
2022-05-17 08:19:31
Android 动态加载二维码视图生成快照的示例
2023-08-04 19:57:54
c#多线程的应用全面解析
2023-03-03 21:15:02
C#子线程更新UI控件的方法实例总结
2022-08-31 15:40:23
Spring事务管理方法步骤解析
2021-12-15 20:09:04
Mybatis配置之<typeAliases>别名配置元素解析
2023-08-02 03:09:54
Mybatis 动态表名+Map参数传递+批量操作详解
2023-04-02 04:08:00
C#自定义画刷原理解析
2021-06-19 19:17:32
SpringBoot快速配置数据源的方法
2023-07-28 13:22:42
C# 爬虫简单教程
2022-04-24 14:10:53
android仿支付宝、微信密码输入框效果
2021-12-23 12:59:16
Android实现计时与倒计时的常用方法小结
2023-10-28 07:18:02
Mybatis-Plus 全局配置无效的解决方案
2022-06-29 12:46:02
Spring异常捕获且回滚事务解决方案
2023-04-25 18:32:41
Android实现发送短信验证码倒计时功能示例
2023-04-03 09:07:48
Java实现文件批量重命名具体实例
2023-04-07 15:41:20
SpringBoot+hutool实现图片验证码
2021-06-17 02:55:27
java图片缩放实现图片填充整个屏幕
2021-06-09 18:30:07
Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
2022-10-31 11:17:22