为什么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条件注解相关推荐

  1. @Conditional、@ConditionalOnClass 等条件注解的作用

    Spring 4框架的新特性:@Conditional注释,此注释使得只有在特定条件满足时才启用一些配置. 目录: (1)例子说明 (2)编码思路 (3)编写条件类WindowCondition和Li ...

  2. Spring Boot 条件注解@Conditional介绍

    一.概述 Spring Boot 是自以为是的,当 Spring Boot 在classpath中找到相关依赖项时,它会为模块提供默认(自动)配置. 举例,Spring Boot 提供了: 如 cla ...

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

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

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

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

  5. 条件注解 @ConditionalOnBean 的正确使用姿势

    本文转载于公众号"吉姆餐厅ak" 条件注解是Spring4提供的一种bean加载特性,主要用于控制配置类和bean初始化条件.在springBoot,springCloud一系列框 ...

  6. @Conditional派生注解

    2019独角兽企业重金招聘Python工程师标准>>> @Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional ...

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

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

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

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

  9. 【Spring注解系列04】@Condition条件注解

    1.@Condition条件注解 满足指定条件,则会加载对应的实例或者类.该注解可以作用于类和方法上. @Condition类属性值中,对应的类,必须是实现Condition接口的类 2.实例 配置类 ...

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

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

最新文章

  1. 【原】开源——基于文件驱动的站点开发
  2. 内存泄漏的定位与排查:Heap Profiling 原理解析
  3. 使用jquery+json实现ajax的方法
  4. C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
  5. 计算机网络 | 网络层 :IP协议详解
  6. 发生生成错误是否继续并运行上次的成功生成_JavaScript 是如何运行的?
  7. 天大18年c语言离线作业,天大18秋C语言程序设计在线作业一辅导资料.docx-资源下载在线文库www.lddoc.cn...
  8. 哈哈哈,程序员没有女朋友的原因,我终于找到了!
  9. 卷积神经网络(CNN)介绍
  10. golang实现的布隆过滤器_面试官:都 2020 年,你在干嘛?还不知道布隆过滤器
  11. ICS lab9 TinyShell 的10条建议
  12. Failed to execute goal org.apache.maven.plugins:ma
  13. 软件项目风险管理(Project Risk Management)
  14. java怎么制作网页_如何制作网页
  15. echarts绘制进度条
  16. typescript总结
  17. 【热门】现在的美颜特效有多可怕?基于Opencv的美颜相机告诉你
  18. Problem K. Road Network - ACPC2015(求树的直径 dp)
  19. apr 移植android平台,omap3530移植android4.0
  20. python工资一般多少p-我会P图,工资5000,兼职1.5w……

热门文章

  1. 线性渐变和放射性渐变
  2. 生成验证码封装(新版)
  3. 子框架页面链接改变(js方法)
  4. k8s Custom Resource
  5. GCC O1 O2 O3
  6. HTTP1.1与HTTP1.0
  7. 正则表达式(以后认真研究下)
  8. MySQL 优化1
  9. EntityFramework6 用 PostgreSQL
  10. iptables小结