Spring-Condition设置

为了满足不同条件下生成更为合适的bean,可以使用condition配置其条件。假如有一个bean,id为magicBean,只有当其具有magic属性时才生成,方法如下:

javaConfig模式:只需要在声明bean的地方加上@Conditional即可

 1 package com.myapp;
 2
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Conditional;
 5
 6 public class MagicBean {
 7     @Bean//显式声明一个bean,id默认为方法名
 8     @Conditional(MagicExistsConditional.class)//生成bean的条件判断,参数类型为class,接受返回的布尔值,为true则生成bean否则不生成
 9     public MagicBean magicBean(){
10         return new MagicBean();
11     }
12 }

其参数(MagicExistsConditional.class)是如何编写呢?

 1 package com.myapp;
 2
 3 import org.springframework.context.annotation.Condition;
 4 import org.springframework.context.annotation.ConditionContext;
 5 import org.springframework.core.env.Environment;
 6 import org.springframework.core.type.AnnotatedTypeMetadata;
 7
 8 public class MagicExistsConditional implements Condition{
 9
10     @Override
11     public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) {
12         // TODO Auto-generated method stub
13         Environment env=arg0.getEnvironment();//获取上下文环境
14         return env.containsProperty("magic");//检查是否包含magic属性
15     }
16
17 }

这里只是通过ConditionContext类型的arg0得到Environment类型的env,通过env调用方法判断是否存在magic属性。

而ConditionContext和AnnotatedTypeMetadata都是接口,里面定义了许多方法,详见《Spring实战(第4版)》P75-P78。

时间: 2024-12-28 17:55:48

Spring-Condition设置的相关文章

spring @Value 设置默认值

@Value 的作用不用说 大家都知道 注解模式下 读取配置文件 注入属性值 /** * MQ地址 */ @Value("${NamesrvAddr}") private String namesrvAddr;   上面的是一个标着的 @Value 注解 如果配置文件中没有设置 NamesrvAddr Spring 在启动的时候讲报错. 设置默认值很简单 @Value("${NamesrvAddr:192.168.0.1}") private String name

Spring MVC4设置使用fastjson作为json解析器,替代jackson

不论是性能.易用性.特性支持,fastjson都要远好于默认的jackson,所以如果应用程序经常使用ajax进行数据交互,建议用fastjson作为默认解析器,只需要简单配置: <mvc:annotation-driven>   <mvc:message-converters register-defaults="true">     <bean class="com.alibaba.fastjson.support.spring.FastJs

Spring之设置Bean值

Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许通过如下几个元素为Bean实例的属性指定值: value ref bean list.set.map.props 一.value:设置普通属性值 <value.../>元素用于指定字符串类型.基本类型的属性值.Spring使用XML解析器来解析出这些数据,然后利用java.beans.PropertyEdior完成类型转换:从java.lang.Str

Spring boot设置启动监听端口

一.直接看代码: 1 @Controller 2 @EnableAutoConfiguration 3 @ComponentScan 4 public class CallMain extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer { 5 private final static Logger logger = LoggerFactory.getLogger(CallMain.cl

spring定时器设置(转自:http://my.oschina.net/LvSantorini/blog/520049)

转自:http://my.oschina.net/LvSantorini/blog/520049<!-- MessageRequestTask类中包含了msgRequest方法,用于执行定时任务 --> <bean id="msg_request" class="com.santorini.task.timer.MessageRequestTask"></bean> <!-- 定时器配置 --> <bean id

spring框架设置jdbc

1.导包 com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar com.springsource.org.apache.commons.pool-1.5.3.jar mysql-connector-java-5.1.26-bin.jar 2.配置BasicDataSource对象(在spring的核心配置文件中设置) <?xml version="1.0" encoding="UTF-8"?> &

Spring 中设置依赖注入

package com.ysq.vo; public class User { private int uid; private String uname; private String pwd; private Date birth; private String[] likes; //声明一个数组 private List<String> list; //声明一个集合 private Map<String, String> map; //声明一个map public User(

spring动态设置多数据源

需求: 项目开发用的sping jdbctemplate, 之前数据源只有一个,现在数据源需要根据需求来进行变更, 也就是说 a用户------>需要访问A数据库服务器 b用户------>需要访问B数据库服务器 查询了资料,发现Spring提供了一个抽象类AbstractRoutingDataSource,为我们很方便的解决了这个问题. 实现: Spring配置文件applicationContext.xml(包含相关bean类的代码) <?xml version="1.0&

spring mvc设置字符集过滤器

<filter> <filter-name>springEncoding</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-

spring mvc 设置设置默认首页的方式

背景: 项目使用springmvc管理请求,有一个小的需求,输入域名的时候自动进入某个页面(或者说自动发起某个请求). 过程: 1,首先想到 在web.xml中配置welcome-file-list的方式,在这里填入一个restful风格的地址后,访问域名发现没有跳转到目标页面(该方法失败) <web:welcome-file-list> <web:welcome-file>xx/xxx</web:welcome-file> </web:welcome-file-