博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring @Conditional条件注解
阅读量:6828 次
发布时间:2019-06-26

本文共 3013 字,大约阅读时间需要 10 分钟。

hot3.png

@Conditional根据满足某一个条件创建一个特定的Bean。比如说当一个jar包在一个类路径下时,自动配置一个或多个Bean,或者只有某个Bean被创建时才会创建另一个Bean。Spring Boot中将大量使用到进行一些自动配置。

以下示例根据不同操作系统作为条件,实现condition接口重写matches方法判断条件,若在windows下运行则输出列表命令dir,若在linux下则输出ls。

windows判断条件类

import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @author Kevin * @description * @date 2016/7/1 */public class WindowsCondition implements Condition {    @Override    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {        return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");    }}

linux判断条件

import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.type.AnnotatedTypeMetadata;/** * @author Kevin * @description * @date 2016/7/1 */public class LinuxCondition implements Condition {    @Override    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {        return conditionContext.getEnvironment().getProperty("os.name").contains("Linux");    }}

命令接口

/** * @author Kevin * @description * @date 2016/7/1 */public interface ListService {    public String showListCmd();}

windows条件下创建的Bean类

/** * @author Kevin * @description * @date 2016/7/1 */public class WindowsListService implements ListService {    @Override    public String showListCmd() {        return "dir";    }}

linux条件下创建的Bean类

/** * @author Kevin * @description * @date 2016/7/1 */public class LinuxListService implements ListService {    @Override    public String showListCmd() {        return "ls";    }}

配置类

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Conditional;import org.springframework.context.annotation.Configuration;/** * @author Kevin * @description * @date 2016/7/1 */@Configuration@ComponentScan("ch03.condition")public class ConditionConfig {    @Bean    // 通过该注解,符合WindowsCondition条件则实例化    @Conditional(WindowsCondition.class)    public ListService windowsListService() {        return new WindowsListService();    }    @Bean    @Conditional(LinuxCondition.class)    public ListService linuxListService() {        return new LinuxListService();    }}

运行

import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * @author Kevin * @description * @date 2016/7/1 */public class Main {    public static void main(String[] args) {        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class);        ListService listService = context.getBean(ListService.class);        System.out.println(context.getEnvironment().getProperty("os.name") + "系统下列表命令为:" + listService.showListCmd());        context.close();    }}

结果

110133_YY9X_1421353.png

转载于:https://my.oschina.net/kevinair/blog/703994

你可能感兴趣的文章
创客集结号:3D打印的材料
查看>>
Ceph
查看>>
架构的“一小步”,业务的一大步
查看>>
libvirt虚拟系统如何增加usb设备
查看>>
API 接口防刷
查看>>
Corrupted MAC on input
查看>>
vCenter Server 返回 503 服务不可用错误
查看>>
迭代器,生成器
查看>>
如何用二分法在有序数组中找到你想要的数字
查看>>
单向ospf
查看>>
深蓝串口调试工具2017冬季版(2.14.11)
查看>>
linux ssh_config和sshd_config配置文件
查看>>
Oracle教程之管理索引(六)--Oracle重建索引
查看>>
ubuntu编译最简环境
查看>>
回顾一个考务系统的开发
查看>>
何为云计算
查看>>
IN(传递参数)加字段原始值实现方法
查看>>
vmware下centos拓展空间
查看>>
nginx安装手册
查看>>
Linux-shell-完全详解
查看>>