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
  • asp之家 软件编程 m.aspxhome.com