java spring 条件注解_【Spring】Spring高级话题-条件注解-@Condition

进行本示例的演示,需要先配置好Maven和Spring哦、

见:

【Spring】基于IntelliJ IDEA搭建Maven

分析

通过profile,我们可以获得不同的profile,我们可以获得不同的Bean。Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Condition注解。

@Condition根据满足某一个特定条件创建一个特定的Bean。

比如说,当某一个jar包在一个类路径下的时候,自动配置一个或多个Bean;或者只有某个Bean被创建才会创建另外一个Bean。

总的来说,就是根据特定条件来控制Bean的创建行为,这样我们可以利用这个特性来进行一些自动的配置。

下面这个示例将以不同的操作系统来作为条件,通过实现Condition接口,并重写其matches方法来构造判断条件。

若在Windows系统下运行程序,则输出列表命令为dir;若在Linux操作系统下运行程序,则输出列表命令为ls。

示例

先需要定义判断条件

判定Windows的条件

package cn.hncu.p3.p4_conditional;

import org.springframework.context.annotation.Condition;

import org.springframework.context.annotation.ConditionContext;

import org.springframework.core.type.AnnotatedTypeMetadata;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:24. * Explain:判断Windows的条件 */

public class WindowsCondition implements Condition{

@Override

public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){

return context.getEnvironment().getProperty("os.name").contains("Windows");

}

}

判定Linux的条件

package cn.hncu.p3.p4_conditional;

import org.springframework.context.annotation.Condition;

import org.springframework.context.annotation.ConditionContext;

import org.springframework.core.type.AnnotatedTypeMetadata;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:28. * Explain:判定Linux的条件 */

public class LinuxCondition implements Condition{

@Override

public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

return context.getEnvironment().getProperty("os.name").contains("Linux");

}

}

不同系统下Bean的类

首先需要一个接口,接下来不同的Bean都需要实现这个接口。

接口

package cn.hncu.p3.p4_conditional;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:31. * Explain:接口-Bean需要实现的接口 */

public interface ListService {

public String showListCmd();

}

Windows下所要创建的Bean的类

package cn.hncu.p3.p4_conditional;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:41. * Explain:Windows下所要创建的Bean的类 */

public class WindowsListService implements ListService {

@Override

public String showListCmd() {

return "dir";

}

}

Linux下所要创建的Bean的类

package cn.hncu.p3.p4_conditional;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:42. * Explain:Linux下所要创建的Bean的类 */

public class LinuxListService implements ListService {

@Override

public String showListCmd() {

return "ls";

}

}

配置类

package cn.hncu.p3.p4_conditional;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Conditional;

import org.springframework.context.annotation.Configuration;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:48. * Explain:配置类 */

@Configuration

public class ConditionConfig {

//matches方法返回true的,就运行哪个方法

@Bean

@Conditional(WindowsCondition.class)//通过@Condition注解,符合Windows条件则实例化windowsListService

public ListService windowsListService(){

return new WindowsListService();

}

@Bean

@Conditional(LinuxCondition.class)//通过@Condition注解,符合Linux条件则实例化linuxListService

public ListService linuxListService(){

return new LinuxListService();

}

}

运行

package cn.hncu.p3.p4_conditional;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/7. * Time: 下午 7:57. * Explain:运行类 */

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()

);

}

}

运行结果

25c669a873b65d95ec0907fc681dbcbe.png

本文章由[谙忆]编写, 所有权利保留。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决springBoot 的templates中html引入css文件失败

我的情况是网页打开没有css效果 文件结构: 解决办法1:修改路径(springBoot已经默认静态资源在static文件夹)只需href“css/你的.css” 解决办法2:增加配置文件 解决办法3:使用 templates语法引入

java并发 cpu高_java高并发核心要点|系列5|CPU内存伪共享

上节提到的:伪共享,今天我们来说说。那什么是伪共享呢?这得从CPU的缓存结构说起。以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度…

springboot拦截了静态资源css,js,jpg,png等

SpringBoot中自己写的拦截器,居然把静态资源也拦截了,导致了页面加载失败 /****/ Configuration public class SpringMvcWebConfigSupport implements WebMvcConfigurer {/*** 默认访问的是首页** param registry*/Overridepublic void addViewControlle…

java 多态实现的jvm调用过程_多态:JVM是如何进行方法调用的

在我们平时的工作学习中写java代码时,如果我们在同一个类中定义了两个方法名和参数类型都相同的方法时,编译器会直接报错给我们。还有在代码运行的时候,如果子类定义了一个与父类完全相同的方法的时候,父类的方法就会被覆盖&#…

java 0l是多少_Java 构造器 - osc_0ltyoebk的个人空间 - OSCHINA - 中文开源技术交流社区...

Java 基础构造器构造器:构造对象.1.构造方法的名字必须和类名字保持一致.2.构造方法没有返回类型.(不是没有返回值!!!!!!!!!!!!!)3.构造方法可以定义参数,也可以不定义,参数默认的是无参构造.4.构造方法也遵守访问修饰符的限制,5.构造方法也支持方法的重载.6.会先执行方法.什么…

java 皮鞋_java反射

一、反射的概述反射机制允许java程序加载一个运行时才得知其名称的类,获悉其完整API信息,包括其修饰符、超类、实现的接口,也包括属性和方法的所有信息;二、反射的作用能够分析类能力的程序成为反射(reflective)。反射的功能极其强…

Docker启动MySql后连接报1251处理方法

问题描述: docker成功启动mysql容器后使用navicat连接报1251 - Client does not support authentication protocol requested byserver;consider upgrading MySQL client 处理方法: 首先进入MySQL容器内 docker exec -it mysql bash登录MySQL mysql -…

Node.js介绍、优势、用途

一、Node.js介绍 Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、Java、Python、.NET、Ruby等后端语言平起平坐。 Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引…

RROR in main Module not found: Error: Can‘t resolve ‘index.js‘

第一种方式,使用新的命令 webpack打包的时候报错 webpack版本升级了 这个命令不能用了 用这个就可以: webpack ./index.js -o ./dist./dist是打包文件生成的目录 另一种方式 更改webpack版本,降低版本,还有webpak这个命令 降…

Vue报错:Unknown custom element: router-view - did you register the component correctly页面中不显示链接

Vue报错:Unknown custom element: router-view - did you register the component correctly vue-router应用到组件中时报错: Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide t…

Vue页面跳转后不显示问题

Vue页面跳转后不显示问题 必须要添加 path前面要有/

Windows之node.js安装

Windows之node.js安装 1.下载node.js, 下载地址:https://nodejs.org/zh-cn/download/ 选择windows安装 2.安装,双击软件图标——接受协议——选择安装路径——选择安装配置(如下图)——等待安装——完成安装。 自动帮…

php开发工具 debug,php开发性能调试工具xdebug

调试是一门艺术,在项目开发过程中,调试是很关键的一步。php中一般使用die,exit()控制断点并使用echo、print_r()、var_dump()、printf()输出结果来调试。一般情况下以上就可以满足开发者调试的目的了。下面来介绍一下xdebug工具。Xdebug是一个开放源代码…

Windows之vue-cli安装和vue项目快速搭建

Windows之vue-cli安装和vue项目快速搭建 1.提前安装好node.js, 安装步骤:https://blog.csdn.net/qq_43842093/article/details/116918715 2.nodejs安装好后,默认带有npm 3.使用npm安装vue-cli cnpm instal1 vue-cli-g #测试是否安装成功#查看…

java 字符流 utf8,JAVA基础(字符流设置编码读写字符)

1,使用指定的码表读写字符FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)【1】 代码分…

支付宝沙箱支付步骤

蚂蚁金服开放平台文档中心——网页移动应用——开放能力——支付能力——电脑网站支付下载SDK&Demo调试Demo文档中心——网页移动应用——开发工具——沙箱环境生成公钥和私钥,设置应用公钥在Demo中添加APPID,应用私钥和支付宝公钥支付宝网关

matlab 一维 平滑,一维加噪信号的平滑处理(3)

%-------------------------------------------------------------------------- % 调用medfilt1函数对加噪正弦波信号进行平滑处理 %-------------------------------------------------------------------------- %*****************产生加噪正弦波信号,绘制加噪波…

Module build failed: Error: Node Sass version 5.0.0 is incompatible with ^4.0.0.

Module build failed: Error: Node Sass version 5.0.0 is incompatible with ^4.0.0. node-sass版本过高导致的,卸载重装低版本: 1.卸载已安装版本 npm uninstall node-sass 2.安装 npm install node-sass4.14.1 3.npm run dev

php高中级程序员面试题,PHP 程序员面试笔试常考面试题精讲

最近假期的原因,决定在chat开了这门课,希望对你有帮助。主要总结汇总了 PHP 面试过程中最爱问的几道面试题。这些面试题可以很好的帮助面试者准备,并让你在面试过程中很好的回答这些面试题,轻松拿下 offer。由于一个 PHP 应聘者面…

Gompertz模型绘图 matlab,Logistic模型matlab求解

Logistic模型求解怎么用matlab求解啊?悬赏分:100 - 解决时间:2008-11-17 23:09已知x0:1:12y[43.65 109.86 187.21 312.67 496.58 707.65 960.25 1238.75 1560.00 1824.29 2199.00 2438.89 2737.71]yL/(1a*exp(-k*x))利用线性回归模型所得到的…