文档章节

使用@Conditional条件注解

FEINIK
 FEINIK
发布于 2017/02/14 21:34
字数 318
阅读 73
收藏 0

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 {
   @Override
   public 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 {
   @Override
   public 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 {
   @Override
   public String showCmd() {
      return "dir";
   }
}

7. Linux系统下创建的Bean类

public class ListLinuxCmd implements ListCmdService {
   @Override
   public 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 = new
            AnnotationConfigApplicationContext(ConditionConfig.class);
      ListCmdService listCmdService = context.getBean(ListCmdService.class);
      System.out.println(context.getEnvironment().getProperty("os.name") +
            " 系统命令:" + listCmdService.showCmd());
   }
}

 

© 著作权归作者所有

共有 人打赏支持
FEINIK
粉丝 225
博文 57
码字总数 53142
作品 0
广州
后端工程师
私信 提问
Spring注解——使用@Conditional来按照条件注册bean

1.有时候需要根据不同条件生成不同的 bean,这时候就需要用到 @Conditional 注解。常见的一种用法,就是根据操作系统类型,注册不同的 bean。在 BeanConfig 配置类中增加三个 bean。 查看当前...

冯先生的笔记
06/24
0
0
Spring Boot 自动配置的 “魔法” 是如何实现的?

原文出处:sylvanassun Spring Boot是Spring旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出标准...

sylvanassun
06/10
0
0
SpringBoot基础篇Bean之条件注入@Condition使用姿势

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 前面几篇关于Bean的基础博文中,主要集中在Bean的定义和使用,但实际的情况中有没有一些场景是不加载我定义的bean,或者只有满足某些前提条...

小灰灰Blog
10/21
0
0
Spring Boot是如何实现自动配置的

Spring Boot 是 Spring 旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出标准化的应用。Spring Bo...

技术小能手
07/09
0
0
springBoot注解@Conditional

官方文档定义:“Indicates that a component is only eligible for registration when all specified conditions match”,意思是只有满足一些列条件之后创建一个bean。 @Conditional定义 ...

xiaomin0322
01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

node安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

笑丶笑
32分钟前
3
0
OSChina 周三乱弹 —— 夜半回家,推门不动

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :分享陶晶莹/张雨生的单曲《我期待》 《我期待》- 陶晶莹/张雨生 手机党少年们想听歌,请使劲儿戳(这里) @cc_z :熬夜一时爽,...

小小编辑
44分钟前
423
10
验证码

response生成验证码 验证码的作用:防止恶意注册、攻击等 网站上看到的验证码,实际上都是一些图片,而这些图片都是程序(Servlet)生成的! package day19.test; import java.awt.Color; i...

码农屌丝
今天
1
0
day147-2018-11-14-英语流利阅读-待学习

《毒液》刚刚上映,创造漫威宇宙的人却走了 雪梨 2018-11-14 1.今日导读 中国的金庸创造了侠义英雄和江湖传奇,而大洋彼岸的斯坦·李也同样创造了一个绚烂璀璨的漫威宇宙,他构思的每个超级英...

飞鱼说编程
今天
16
0
CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部