浅谈spring中@Conditional(条件注解)
来源:互联网 发布:战国史se人物数据 编辑:程序博客网 时间:2024/06/13 13:18
通过@Conditional注解可以根据代码中设置的条件装载不同的bean,在设置条件注解之前,先要把装载的bean类去实现Condition接口,然后对该实现接口的类设置是否装载的条件,下面通过代码演示。演示之前先说下,示例先创建一个接口,然后创建两个实现该接口的类,通过条件注解去实现在容器中到底装载哪个实现类,即在spring容器中装载那个bean。
1、创建服务接口
在该示例接口中,创建一个人的接口,并创建一个服务方法,然后通过该接口分别实现一个男人和一个女人的实现类,通过注解去判断装载的bean。接口代码为:
package com.spring.conditional.annotation;//一个服务接口public interface Person { void birth();}
2、接口实现类
下面分别实现一个男人和一个女人的实现类。
男人的实现方类:
package com.spring.conditional.annotation;public class Man implements Person { @Override public void birth() { System.out.println("我不会生孩子……"); }}
女人的实现类为:
package com.spring.conditional.annotation;public class Woman implements Person { @Override public void birth() { System.out.println("我要生孩子了……"); }}
3、创建Man和Woman的判断条件类
Man的条件类
package com.spring.conditional.annotation;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class ManCondition implements Condition { @Override public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) { return false; }}
Woman的条件类
package com.spring.conditional.annotation;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class WomanCondition implements Condition { @Override public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) { return true; }}
4、创建配置类
package com.spring.conditional.annotation;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;@Configuration@ComponentScanpublic class ConditionalConfig { @Bean @Conditional(ManCondition.class) //如果ManCondition中的match方法返回结果true,就创建该Bean,否则不创建 public Man getMan(){ return new Man(); } @Bean @Conditional(WomanCondition.class) public Woman getWoman(){ return new Woman(); }}
5、创建测试方法
package com.spring.conditional.annotation;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestMain { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ConditionalConfig.class); Person person = ctx.getBean(Person.class); //通过条件类判断,只有Woman的条件类返回true,所以在容器中只能找到Woman的实现类的装载bean,而Woman又是继承自Person的,所以,在容器中可以找到一个唯一的Bean,通过getBean获取到。 System.out.println(person); person.birth(); }}
输出结果为:
com.spring.conditional.annotation.Woman@75881071我要生孩子了……
阅读全文
0 0
- 浅谈spring中@Conditional(条件注解)
- Spring 条件注解(@Conditional)
- 第十一章 Spring条件注解@Conditional
- Spring之条件注解@Conditional,条件(系统)不同注入的对象也不同。
- Spring4 条件注解@Conditional
- @Conditional条件注解
- spring boot 条件注解的使用@Conditional;@Conditional 可以根据条件,创建不同的bean,
- Spring 条件化Bean @Conditional
- SpringBoot4-spring高级话题-spring aware,多线程,计划任务,条件注解@Conditional
- Spring @Conditional注解的使用
- spring @conditional注解的使用
- Spring注解@Profile与@Conditional
- springboot 1.5.3 源码分析(三):spring @Conditional注解
- 【Spring】 (10)条件注解
- Spring-boot中Conditional介绍
- Excel 中条件格式化单元格 conditional formatting
- C# 中利用 Conditional 定义条件方法
- SPEC中定义条件macro(conditional macro)
- 创建JPA工程时提示:at least one user library must be selected
- hdu 1159 Common Subsequence
- POJ 1006 生理周期
- Codeforces 835 D Palindromic characteristics 区间dp
- 获取浏览器/界面宽高的问题
- 浅谈spring中@Conditional(条件注解)
- 巧用BeanUtils
- 训练日记-1
- Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全
- 漫步最优化二十一——全局收敛
- OpenCL优化方法-消除访问内存数组引起的循环依赖关系
- java中的基本用法
- CSU-ACM2017暑期训练6-bfs I
- 贪吃蛇案例