使用@Conditional条件注解
为什么80%的码农都做不了架构师?>>>
1. @Conditional注解根据满足的条件来创建一个特定的Bean
2. 示例,以不同的操作系统为条件,通过实现Condition接口,并重写matches方法来构造判断条件,若在Windows系统下运行程序,则输出命令dir, 若在Linux系统下运行则输出 ls
3. 编写判断Windows的条件类
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.stereotype.Service;
@Service
public class WindowsCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {return context.getEnvironment().getProperty("os.name").contains("Windows");}
}
4. 编写判断Linux的条件类
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.stereotype.Service;
@Service
public class LinuxCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {return context.getEnvironment().getProperty("os.name").contains("Linux");}
}
5. 不同系统下Bean的共同接口
public interface ListCmdService {public String showCmd();
}
6. Windows系统下创建的Bean类
public class ListWindowsCmd implements ListCmdService {@Overridepublic String showCmd() {return "dir";}
}
7. Linux系统下创建的Bean类
public class ListLinuxCmd implements ListCmdService {@Overridepublic String showCmd() {return "ls";}
}
8. 配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConditionConfig {@Bean@Conditional(WindowsCondition.class)public ListCmdService listWindowsCmd() {return new ListWindowsCmd();}@Bean@Conditional(LinuxCondition.class)public ListCmdService listLinuxCmd() {return new ListLinuxCmd();}
}
代码解释:@Conditional注解,符合WindowsCondition条件则创建ListWindowsCmd实例,符合LinuxCondition条件则创建ListLinuxCmd实例
9. 运行
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {public static void main(String[] args) {AnnotationConfigApplicationContext context = newAnnotationConfigApplicationContext(ConditionConfig.class);ListCmdService listCmdService = context.getBean(ListCmdService.class);System.out.println(context.getEnvironment().getProperty("os.name") +" 系统命令:" + listCmdService.showCmd());}
}
转载于:https://my.oschina.net/feinik/blog/838725
使用@Conditional条件注解相关推荐
- @Conditional、@ConditionalOnClass 等条件注解的作用
Spring 4框架的新特性:@Conditional注释,此注释使得只有在特定条件满足时才启用一些配置. 目录: (1)例子说明 (2)编码思路 (3)编写条件类WindowCondition和Li ...
- Spring Boot 条件注解@Conditional介绍
一.概述 Spring Boot 是自以为是的,当 Spring Boot 在classpath中找到相关依赖项时,它会为模块提供默认(自动)配置. 举例,Spring Boot 提供了: 如 cla ...
- 难以想象SpringBoot中的条件注解底层居然是这样实现的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- 面试:SpringBoot中的条件注解底层是如何实现的?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...
- 条件注解 @ConditionalOnBean 的正确使用姿势
本文转载于公众号"吉姆餐厅ak" 条件注解是Spring4提供的一种bean加载特性,主要用于控制配置类和bean初始化条件.在springBoot,springCloud一系列框 ...
- @Conditional派生注解
2019独角兽企业重金招聘Python工程师标准>>> @Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional ...
- Spring Boot 自动配置之条件注解
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 神奇的自动配置,主要依靠大量的条件注解来使用配置自动化. 根据满足某一个特定条件创建一个特定的Bean ...
- 面试:Spring Boot 中的条件注解底层是如何实现的?
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
- 【Spring注解系列04】@Condition条件注解
1.@Condition条件注解 满足指定条件,则会加载对应的实例或者类.该注解可以作用于类和方法上. @Condition类属性值中,对应的类,必须是实现Condition接口的类 2.实例 配置类 ...
- @data注解不生效_面试官:你经常在SpringBoot中使用的条件注解底层是如何实现的?你了解过吗?...
SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...
最新文章
- 【原】开源——基于文件驱动的站点开发
- 内存泄漏的定位与排查:Heap Profiling 原理解析
- 使用jquery+json实现ajax的方法
- C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
- 计算机网络 | 网络层 :IP协议详解
- 发生生成错误是否继续并运行上次的成功生成_JavaScript 是如何运行的?
- 天大18年c语言离线作业,天大18秋C语言程序设计在线作业一辅导资料.docx-资源下载在线文库www.lddoc.cn...
- 哈哈哈,程序员没有女朋友的原因,我终于找到了!
- 卷积神经网络(CNN)介绍
- golang实现的布隆过滤器_面试官:都 2020 年,你在干嘛?还不知道布隆过滤器
- ICS lab9 TinyShell 的10条建议
- Failed to execute goal org.apache.maven.plugins:ma
- 软件项目风险管理(Project Risk Management)
- java怎么制作网页_如何制作网页
- echarts绘制进度条
- typescript总结
- 【热门】现在的美颜特效有多可怕?基于Opencv的美颜相机告诉你
- Problem K. Road Network - ACPC2015(求树的直径 dp)
- apr 移植android平台,omap3530移植android4.0
- python工资一般多少p-我会P图,工资5000,兼职1.5w……