java 按条件注解_Spring 条件注解 @Conditional
Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解。
下面的示例将以不同的操作系统作为条件,我们将通过实现Condition接口,并重写其matches方法来构造判断条件。如在Windows系统下运行程序输出dir,Linux下输出ls。
一、不同系统下的Bean
1、声明接口
package cn.wuweixiang.springbootdemo.service;
/**
* ListService
*
* @author weixiang.wu
* @date 2018 -08-22 15:39
*/
public interface ListService {
/**
* Show list cmd string.
*
* @return the string
*/
String showListCmd();
}
2、Windows下所要创建的Bean
package cn.wuweixiang.springbootdemo.service.impl;
import cn.wuweixiang.springbootdemo.service.ListService;
/**
* WindowsListServiceImpl
*
* @author weixiang.wu
* @date 2018-08-22 15:40
**/
public class WindowsListServiceImpl implements ListService {
@Override
public String showListCmd() {
return "dir";
}
}
3、Linux下所要创建的Bean
package cn.wuweixiang.springbootdemo.service.impl;
import cn.wuweixiang.springbootdemo.service.ListService;
/**
* LinuxListServiceImpl
*
* @author weixiang.wu
* @date 2018-08-22 15:42
**/
public class LinuxListServiceImpl implements ListService {
@Override
public String showListCmd() {
return "ll";
}
}
二、判断条件定义
package cn.wuweixiang.springbootdemo.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import java.util.Objects;
/**
* ConditionalConfig
*
* @author weixiang.wu
* @date 2018-08-22 15:55
**/
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Objects.requireNonNull(context.getEnvironment().getProperty("os.name")).contains("Linux");
}
}
package cn.wuweixiang.springbootdemo.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import java.util.Objects;
/**
* ConditionalConfig
*
* @author weixiang.wu
* @date 2018-08-22 15:55
**/
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Objects.requireNonNull(context.getEnvironment().getProperty("os.name")).contains("Windows");
}
}
三、配置类
package cn.wuweixiang.springbootdemo.config;
import cn.wuweixiang.springbootdemo.condition.LinuxCondition;
import cn.wuweixiang.springbootdemo.condition.WindowsCondition;
import cn.wuweixiang.springbootdemo.service.ListService;
import cn.wuweixiang.springbootdemo.service.impl.LinuxListServiceImpl;
import cn.wuweixiang.springbootdemo.service.impl.WindowsListServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
/**
* ConditionalConfig
*
* @author weixiang.wu
* @date 2018 -08-22 15:55
*/
public class ConditionalConfig {
/**
* 使用@Conditional注解,符合Linux条件就实例化LinuxListService
*
* @return the list service
*/
@Bean
@Conditional(LinuxCondition.class)
public ListService linuxListService() {
return new LinuxListServiceImpl();
}
/**
* 使用@Conditional注解,符合Windows条件就实例化WindowsListService
*
* @return the list service
*/
@Bean
@Conditional(WindowsCondition.class)
public ListService windowsListService() {
return new WindowsListServiceImpl();
}
}
四、测试类
package cn.wuweixiang.springbootdemo;
import cn.wuweixiang.springbootdemo.config.ConditionalConfig;
import cn.wuweixiang.springbootdemo.service.ListService;
import org.junit.After;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* SpringConditionalTest
*
* @author weixiang.wu
* @date 2018-08-22 16:00
**/
public class SpringConditionalTest {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionalConfig.class);
@Test
public void contextTest() {
ListService listService = context.getBean(ListService.class);
System.out.println(context.getEnvironment().getProperty("os.name")
+ "系统下的列表命令为:"
+ listService.showListCmd());
}
@After
public void closeContext() {
context.close();
}
}
转载至链接:https://my.oschina.net/wuweixiang/blog/1932216
java 按条件注解_Spring 条件注解 @Conditional相关推荐
- spring多参java注解_spring参数注解校验
在写一些controller协议的时候,有些时候从前端传过来的参数较多,好的办法是定义一个实体类来封装请求参数,但是用实体类封装参数后,无法对参数值进行校验,可以使用spring的@Validated ...
- @aspect注解_Spring自定义注解玩法大全,从入门到放弃
在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...
- java filter 注解_Spring常用注解及自定义Filter的实现
@Configuration通常用在配置类上,告诉spring这是一个配置类(配置类类似配置文件,区别在于用类的形式来表现xml: @Service用于标注业务层组件service层, @Contro ...
- java mvc 注解_Spring MVC注解开发入门
注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...
- java自动注入注解_Spring自动注解标签@Autowired不能注入xml配置的bean吗?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 配置service的xml service代码 public class LoginServiceImpl extends BaseDaoServiceI ...
- Mybatis多条件直接查询Param注解版
1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.willia ...
- java中spring的注解_spring中的各种注解解析
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- Java注解配置rest服务_Spring Boot 注解—常用注解
注:该部分内容包含一些常用注解,如果没有学习过java注解的同学可以先看一下上一小节的内容Spring Boot 注解-基本知识 ,不看也没关系,下面就开始本节内容. @Configuration注解 ...
- java spring框架 注解_spring框架之注解的使用
原标题:spring框架之注解的使用 今天是刘小爱自学Java的第122天. 感谢你的观看,谢谢你. 学习内容安排如下: Spring注解的使用. JavaWeb项目的搭建. Spring的Web集成 ...
最新文章
- go标准库的学习-sync互斥
- leetcode28. Implement strStr() (以及个人对KMP算法理解)
- Linux 2.6内核配置说明(Networking网络)
- 安川交流伺服电机的驱动
- Java文件上传如何实现呢?
- 【实战 Ids4】║ 控制台密码模式搭配Ocelot网关
- 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- 检查linux是否安装rar,rarlinux的安装及使用
- Tableau教程——一
- C语言程序设计之小超市管理系统
- 数字基础设施可视化管理,任重而道远
- 【黄啊码】fastadmin接入微信支付和支付宝支付
- DiscuzX 数据字典 超详细
- 汽车租赁系统 ssm
- Python编写一个程序来计算 BMI 值。
- cufflinks修改使用
- 曹晋睿 受邀担任第七届少儿模特明星盛典亲善大使
- 官方完整HL7 ECG-XML例子及注释翻译(1)
- 手机html5游戏内存修改,一种防止游戏被内存修改器修改的方法
热门文章
- MySQL为表添加外键约束
- 一款小清新的 SpringBoot+ Mybatis 前后端分离后台管理系统项目
- 基于SpringBoot+Vue前后端分离管理系统
- can not open include file afxwin.h :no such header fileor directory in vs 2015 c++
- “面试不败计划”: java语言基础面试题(一)
- Java提升篇:理解String 及 String.intern() 在实际中的应用
- 数据结构之排序算法(一)-堆排序
- OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
- stm32采集正弦波峰峰值_科研项目 | 基于STM32的永磁同步电机SVPWM控制设计
- ant design vue input change_Ant-design-vue项目实现动态路由