@Conditional注解是条件注册IOC的注解

满足条件的将被注册进IOC容器里面,不满足的将不被注册

@Conditional注解传入的参数是一个org.springframework.context.annotation.Condition类的数组

org.springframework.context.annotation.Condition类是一个接口类,需要自己去实现它
我这里的配置类里面注册了3个Person的Bean,一个是普通的Person,一个是Bill Gates的(Windows公司的老板),还有个是Linus(Linux)
IOC可以获取Environment,environment可以获取“os.name”,通过该方法判断当前操作系统是Windows还是Linux,然后注册对应的Bean
示例代码:

package com.debuggg.test1.main3;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;@Configuration
public class MainConfig2 {/*** 作者 ZYL* 功能描述 : @Conditional注解* 条件注册注解,满足条件的就注册,不满足的就不注册到ioc里面* Conditional里面是@org.springframework.context.annotation.Condition类的实现* 里面有个matches方法,两个参数:*  org.springframework.context.annotation.ConditionContext:判断条件能使用的上下文(环境*  org.springframework.core.type.AnnotatedTypeMetadata:注释信息* 日期 2020-04-12 21:17* 参数* 返回值 com.debuggg.test1.main3.Person*/@Beanpublic Person person(){return new Person("张三",18);}@Conditional({WindowsConditional.class})@Beanpublic Person person01(){return new Person("Bill Gates",62);}@Conditional({LinuxConditional.class})@Beanpublic Person person02(){return new Person("Linus",47);}
}

WindowsConditional

package com.debuggg.test1.main3;import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;public class WindowsConditional implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {//TODO 是否是Linux系统//1.能获取到ioc使用的beanFactoryConfigurableListableBeanFactory beanFactory = context.getBeanFactory();//2.获取类加载器ClassLoader classLoader = context.getClassLoader();//3.获取当前环境信息Environment environment = context.getEnvironment();//4.获取到bean定义的注册类BeanDefinitionRegistry registry = context.getRegistry();//通过环境信息获取到当前的操作系统版本String property = environment.getProperty("os.name");//判断操作系统是包含了Windows就返回trueif(property.contains("Windows")){return true;}return false;}
}

LinuxConditional

package com.debuggg.test1.main3;import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;public class LinuxConditional implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {Environment environment = context.getEnvironment();String property = environment.getProperty("os.name");if(property.contains("Linux")){return true;}return false;}
}

@Conditional还可以放在类上面,表示如果该类满足条件,就注册该类里面的所有Bean,否则就不注册

注解-@Conditional的使用相关推荐

  1. 《深入浅出Spring》Spring注解@Conditional

    @Conditional注解 @Conditional注解是从spring4.0才有的,可以用在任何类型或者方法上面,通过@Conditional注解可以配置一些条件判断,当所有条件都满足的时候,被@ ...

  2. java 按条件注解_Spring 条件注解 @Conditional

    Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解. 下面的示例将以不同的操作系统作为条件,我们将通过实现Condition接口,并重写其matches ...

  3. Spring Boot 条件注解@Conditional介绍

    一.概述 Spring Boot 是自以为是的,当 Spring Boot 在classpath中找到相关依赖项时,它会为模块提供默认(自动)配置. 举例,Spring Boot 提供了: 如 cla ...

  4. Spring Boot @Conditional 注解

    Spring Boot @Conditional注解 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean. @Conditional ...

  5. 12、常见Conditional注解源码解析-ConditionalOnBean(写作中...)

    ConditionalOnBean 源码解析 ConditionalOnBean 注解 看看 ConditionalOnBean 注解 @Conditional(OnBeanCondition.cla ...

  6. 【Spring注解】@Conditional注解的使用

    前言 @Conditional注解的判断条件,决定了该类是否可以成为Bean.即使该类被@Component注解修饰,@Conditional条件是false,那么该类也不会注入到IOC容器中.且该注 ...

  7. conditional系列常用注解

    文章目录 背景 注解 @Conditional @ConditionalOnProperty @ConditionalOnBean @ConditionalOnClass @ConditionalOn ...

  8. 详解Spring Boot框架中的@Conditional系列注解

    目录 1. @Conditional 注解 2. Spring boot 扩展 1) @ConditionalOnClass和@ConditionalOnMissingClass注解 2) @Cond ...

  9. spring springboot springcloud常用注解

    @SpringBootApplication 组合注解,用在启动类上,源码: @Retention(RetentionPolicy.RUNTIME) @SpringBootConfiguration ...

最新文章

  1. SpringBoot如何使用策略模式干掉if else
  2. JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案
  3. 用golang完成tcp协议传输
  4. 如何在Windows下编译OpenSSL
  5. 微信在朋友圈强行置顶视频号直播分享,引网友疯狂吐槽:又丑又烦!
  6. EBS MOAC深入研究(转)
  7. CentOs虚拟机NAT模式下静态IP的配置
  8. CKeditor4.7.3标准版图片上传及相关配置
  9. Security+ 学习笔记46 网络工具
  10. 动态包含与静态包含的区别
  11. perl语言入门级练习记录23章
  12. 国外动态住宅ip怎么使用?
  13. 三星 s4(i9502) android4.4rom 官方,三星i9502官方rom固件系统刷机包_三星i9502原版线刷包下载...
  14. 计算机重启后打印机无法连接不上,笔记本之前连上了打印机,重启路由后就连不上了,什么原因...
  15. hdu 6638 Snowy Smile
  16. maven-default-http-blocker
  17. web前端之百度首页仿写
  18. ClickableSpan 去除下划线
  19. 运动场球具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 刚出道的黑客搞瘫美国输油管道!

热门文章

  1. CentOS7配置samba共享文件系统
  2. 软考中级信息安全工程师开编
  3. unity mysql增删改查,XML的使用,增删改查(Unity中的)
  4. 一步步实现SDDC-部署VC后的配置
  5. Maven学习总结(35)——Maven项目错误 JAX-RS (REST Web Services) 2.0 can not be installed问题...
  6. Java基础学习总结(76)——Java异常深入学习研究
  7. c语言迷宫求解毕业设计,毕业设计(论文)-基于Windows平台C语言实现迷宫游戏的设计.doc...
  8. 2013蓝桥杯java试题_蓝桥杯2013决赛java本科b组试题.doc
  9. Oracle实例之间的心跳机制,为何而心跳-Oracle Heartbeat研究之二
  10. python opencv最小外接矩形中心点_Opencv绘制最小外接矩形、最小外接圆