【Spring注解系列04】@Condition条件注解
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条件注解相关推荐
- Spring Boot 自动配置之条件注解
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 神奇的自动配置,主要依靠大量的条件注解来使用配置自动化. 根据满足某一个特定条件创建一个特定的Bean ...
- [Spring实战系列](18)注解切面
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50659876 使用注解来创建切面是Aspec ...
- 【Java注解系列】内置注解与AOP实现自定义注解
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制. Java 语言中的类.方法.变量.参数和包等都可以被标注.和 Javadoc 不同,Java 标注可 ...
- Spring面试系列-04
1. 解释 Spring 框架中 bean 的生命周期? 在传统的Java应用中,bean的生命周期很简单.使用Java关键字new进行bean实例化,然后该bean就可以使用了.一旦该bean不再被 ...
- springboot templates读取不到_精通 Spring Boot 系列 04
阅读全文,约 12 分钟这是江帅帅的第004篇原创 1. Web 开发的支持 使用 Spring Boot 实现 Web 开发更加便捷了,因为直接依赖 spring-boot-starter-web ...
- 面试:Spring Boot 中的条件注解底层是如何实现的?
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
- 难以想象SpringBoot中的条件注解底层居然是这样实现的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- 面试:SpringBoot中的条件注解底层是如何实现的?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- @data注解不生效_面试官:你经常在SpringBoot中使用的条件注解底层是如何实现的?你了解过吗?...
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
最新文章
- epoll监听文件_epoll详解——从功能到内核
- c语言测序,一次Hi-C建库测序,两种分析,你不心动?
- 下拉菜单的option的value属性值问题
- 20145228《Java程序设计》课程总结
- Padding Oracle Attack填充提示攻击-渗透测试
- 学习方法之05六步法则,考上清华北大的路径
- redis 集群讲解
- java泛型面试_Java泛型面试问题
- JXLS 2.4.0学习
- HTML中可伸缩容器怎么设置,CSS布局神器——伸缩盒(语法篇)
- EHOME协议在低功耗场景下使用介绍
- lbj学习日记 07 函数基础
- 【创业之星】软件使用指南
- 课程计划、课程标准、教材三者关系
- 基于wine葡萄酒数据集的分类方法研究
- 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
- 瑞数信息的“狩猎术”
- delphi的函数round、trunc、ceil、floor 和RoundTo
- 微信H5、公众号开发,域名重定向
- Ae 入门系列之五:效果和预设