文档章节

使用@Conditional条件注解

FEINIK
 FEINIK
发布于 2017/02/14 21:34
字数 318
阅读 44
收藏 0
点赞 0
评论 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
粉丝 218
博文 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
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
Spring Boot魔法的背后

Spring Boot的魔法 Spring Boot是一个基于Spring的框架,遵循“约定胜于配置”的理念,提供一套方便的方法来快速创建可执行的Spring应用。具体来说,以往我们开发一个Java Web端或服务端程序...

jacobwu
05/10
0
0
Spring温故而知新 - bean的装配

按条件装配bean 就是当满足特定的条件时Spring容器才创建Bean,Spring中通过@Conditional注解来实现条件化配置bean package com.sl.ioc;import org.springframework.context.annotation.Bean;...

Java-老刘
05/07
0
0
SpringBoot基础教程(十八)——自定义条件注解

spring boot 扩展了spring 的@Conditional注解,提供了很多常用的注解,例如@ConditionalOnProperty根据属性来判断是否要激活这个配置文件或者是激活这个Bean,@ConditionalOnBean根据容器中...

数齐
05/01
0
0
Spring @Conditional详情

最本质的需求是根据条件加载Bean。 Spring4 提供了实现方案 — @Conditional ,可以通过条件判断创建 Bean 。 示例: // java config@Configurationpublic class TestBeanConfig { } // 配套...

张哈希的博客
2017/12/22
0
0
spring注解之@conditional

spring4引入新注解@Conditional,可以使用在Bean注解的类和方法上。 示例: 如上 @Conditional(value = LoginServiceCondition.class),就可以通过LoginServiceCondition这个类进行判断是否加...

图样图森破
2016/12/15
57
0
Spring @Conditional条件注解

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

Kevin-air
2016/07/01
144
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
4分钟前
0
0
Confluence 6 安装一个语言组件

Confluence 捆绑了一系列的语言包。这些语言包在 'Language Configuration' 界面中的语言选项中。在 Confluence 的管理员控制台,你可以选择 Choosing a Default Language 和为用户设置(Edi...

honeymose
5分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型

刘祖鹏
10分钟前
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
14分钟前
0
0
TensorFlow gpu 版 安装

win10 + Python3.6 下载cuda https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=81&target_type=exelocal 下载cudnn,复制链接地址,使用迅......

阿豪boy
33分钟前
0
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
33分钟前
0
0
防火墙未来的发展趋势在哪里?

导读 防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网。当下互联网时代,无论是大小企业,大部分都会部署有防火墙的设备,但这些防火墙往往并不...

问题终结者
35分钟前
0
0
MongoDB 副本集 成员节点 RECOVERING 状态处理

这两天遇到好几个MongoDB集群故障,其中一种就是节点长期处于 RECOVERING 状态,并且不能主动追上 primary 节点,需要手动干预。 首先 rs.status()查看实例状态,发现有的节点处于 RECOVERI...

xxj123gogo
41分钟前
0
0
建造者/构造者模式

在建造者模式中, 有如下4个角色: ● Product产品类 通常是实现了模板方法模式, 也就是有模板方法和基本方法, 这个参考第10章的模板方 法模式。 例子中的BenzModel和BMWModel就属于产品类...

kim_o
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部