第十一章 Spring条件注解@Conditional
来源:互联网 发布:方舟生存进化优化好吗 编辑:程序博客网 时间:2024/06/05 14:09
在第六章 Profile中有介绍,通过@Profile可以根据profile的不同,创建不同的Bean。Spring4提供了一个更通用的基于条件的Bean的创建,即@Conditional注解
下面的示例将以不同的操作系统为条件,实现在Windows系统下运行程序,输出dir,若在Linux系统下运行程序,则输出ls>
一、通过实现Condition接口,定义判断条件
package demo2.condition;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class WindowsCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata arg1) { return context.getEnvironment().getProperty("os.name").contains("Windows"); }}
package demo2.condition;import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;public class LinuxCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata arg1) { return context.getEnvironment().getProperty("os.name").contains("Linux"); }}
二、定义Service接口
package demo2.service;public interface ListService { public String showListCmd();}
三、定义Service的不同实现
package demo2.service;public class WindowsListService implements ListService { @Override public String showListCmd() { return "dir"; }}
package demo2.service;public class LinuxListService implements ListService { @Override public String showListCmd() { return "ls"; }}
四、配置类
通过@Conditional注解实现条件判断
package demo2.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.annotation.EnableScheduling;import demo2.condition.LinuxCondition;import demo2.condition.WindowsCondition;import demo2.service.ListService;import demo2.service.WindowsListService;@Configuration@ComponentScan("demo2")@EnableAspectJAutoProxy@EnableAsync@EnableSchedulingpublic class DIConfig { @Bean @Conditional(WindowsCondition.class) public ListService windowsListService() { return new WindowsListService(); } @Bean @Conditional(LinuxCondition.class) public ListService linuxListService() { return new WindowsListService(); }}
五、运行
package demo2;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import demo2.config.DIConfig;import demo2.service.ListService;public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(); cxt.getEnvironment().setActiveProfiles("dev"); cxt.register(DIConfig.class); cxt.refresh(); ListService ds = cxt.getBean(ListService.class); System.out.println(ds.showListCmd()); cxt.close(); }}
结果
dir
0 0
- 第十一章 Spring条件注解@Conditional
- Spring 条件注解(@Conditional)
- 浅谈spring中@Conditional(条件注解)
- Spring4 条件注解@Conditional
- @Conditional条件注解
- spring boot 条件注解的使用@Conditional;@Conditional 可以根据条件,创建不同的bean,
- Spring之条件注解@Conditional,条件(系统)不同注入的对象也不同。
- Spring 条件化Bean @Conditional
- SpringBoot4-spring高级话题-spring aware,多线程,计划任务,条件注解@Conditional
- Spring @Conditional注解的使用
- spring @conditional注解的使用
- Spring注解@Profile与@Conditional
- 条件化的Bean——@Conditional注解
- spring @conditional
- springboot 1.5.3 源码分析(三):spring @Conditional注解
- Reverse Conditional -- 反转条件
- Conditional Comments 条件注释
- 【Spring】 (10)条件注解
- MinGW+Eclipse下C/C++使用SSE4指令集
- java设计模式--单例模式
- Linq之旅:Linq入门详解(Linq to Objects)
- poj1852——Ants(模拟)
- DataBinding 学习系列(4)DataBinding的高级功能
- 第十一章 Spring条件注解@Conditional
- 计算机语言发展历史
- javascript为下拉列表框动态添加数据方法
- 定位的准确度与精度指标定义——RMS,CEP,Sigma
- Android spannableStringBuilder用法整理
- android LayoutInflater.inflate()的参数介绍
- JS的取经之路(三)
- 判别Class是否属于Interface
- 桥接模式