1.@Condition条件注解

满足指定条件,则会加载对应的实例或者类。该注解可以作用于类和方法上。

@Condition类属性值中,对应的类,必须是实现Condition接口的类

2.实例

配置类:

@Configuration
public class ConditionalConfig {/*** @Conditional({Condition}) : 按照一定的条件进行判断,满足条件给容器中注册bean** 如果系统是windows,给容器中注册("bill")* 如果是linux系统,给容器中注册("linus")*/@Conditional(WindowsCondition.class)@Bean("bill")public Person bill(){return new Person("111","Bill Gates");}@Conditional(LinuxCondition.class)@Bean("linus")public Person linus(){return new Person("222","linus");}}

可以通过设置虚拟机dos名称来改变系统名称。

条件类:必须实现Condition接口

public class LinuxCondition 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();System.out.println("environment.getProperty(os.name)---->"+environment.getProperty("os.name"));if (environment.getProperty("os.name").contains("Linux")){return true;}return false;}
}public class WindowsCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {Environment environment = context.getEnvironment();System.out.println("environment.getProperty(os.name)---->" + environment.getProperty("os.name"));if (environment.getProperty("os.name").contains("Windows")) {return true;}return false;}
}

测试类:

public class ConditionalTest {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConditionalConfig.class);
//        Person linus = (Person) applicationContext.getBean("linus");Person bill = (Person) applicationContext.getBean("bill");
//        System.out.println("linus----->"+linus);System.out.println("bill----->"+bill);}
}

测试结果:

environment.getProperty(os.name)---->Windows 7
environment.getProperty(os.name)---->Windows 7
bill----->Person{id='111', name='Bill Gates'}

【Spring注解系列04】@Condition条件注解相关推荐

  1. Spring Boot 自动配置之条件注解

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 神奇的自动配置,主要依靠大量的条件注解来使用配置自动化. 根据满足某一个特定条件创建一个特定的Bean ...

  2. [Spring实战系列](18)注解切面

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50659876 使用注解来创建切面是Aspec ...

  3. 【Java注解系列】内置注解与AOP实现自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制. Java 语言中的类.方法.变量.参数和包等都可以被标注.和 Javadoc 不同,Java 标注可 ...

  4. Spring面试系列-04

    1. 解释 Spring 框架中 bean 的生命周期? 在传统的Java应用中,bean的生命周期很简单.使用Java关键字new进行bean实例化,然后该bean就可以使用了.一旦该bean不再被 ...

  5. springboot templates读取不到_精通 Spring Boot 系列 04

    阅读全文,约 12 分钟这是江帅帅的第004篇原创 1. Web 开发的支持 使用 Spring Boot 实现 Web 开发更加便捷了,因为直接依赖 spring-boot-starter-web ...

  6. 面试:Spring Boot 中的条件注解底层是如何实现的?

    SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...

  7. 难以想象SpringBoot中的条件注解底层居然是这样实现的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  8. 面试:SpringBoot中的条件注解底层是如何实现的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  9. @data注解不生效_面试官:你经常在SpringBoot中使用的条件注解底层是如何实现的?你了解过吗?...

    SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...

最新文章

  1. epoll监听文件_epoll详解——从功能到内核
  2. c语言测序,一次Hi-C建库测序,两种分析,你不心动?
  3. 下拉菜单的option的value属性值问题
  4. 20145228《Java程序设计》课程总结
  5. Padding Oracle Attack填充提示攻击-渗透测试
  6. 学习方法之05六步法则,考上清华北大的路径
  7. redis 集群讲解
  8. java泛型面试_Java泛型面试问题
  9. JXLS 2.4.0学习
  10. HTML中可伸缩容器怎么设置,CSS布局神器——伸缩盒(语法篇)
  11. EHOME协议在低功耗场景下使用介绍
  12. lbj学习日记 07 函数基础
  13. 【创业之星】软件使用指南
  14. 课程计划、课程标准、教材三者关系
  15. 基于wine葡萄酒数据集的分类方法研究
  16. 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
  17. 瑞数信息的“狩猎术”
  18. delphi的函数round、trunc、ceil、floor 和RoundTo
  19. 微信H5、公众号开发,域名重定向
  20. Ae 入门系列之五:效果和预设

热门文章

  1. register_chrdev深入分析
  2. C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间
  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
  4. 趣链 BitXHub跨链平台 (2)跨链网络拓扑
  5. (chap6 Http首部) 传输方式的分类
  6. 设计模式--中介者(Mediator)模式
  7. python基础高频_面试题(一)
  8. 【网络安全】身份验证凭证为何如此重要?
  9. MySQL触发器简介
  10. 彻底搞懂---三握四挥