spring in action学习笔记七:@Conditional注解的用法
2024-09-04 15:09:07
@Profile注解是@Conditional注解的一个例子。即@Profile也是用@Conditional注解来实现的。
必须让条件实现Condition这个接口。
下面的案例讲如果环境中有magic这个属性,则能通过条件,spring会创建bean。反之如果环境中没有magic这个属性,则不能通过条件,spring就不会创建bean,会报错。
案例的代码如下:
MagicBean的代码如下:
package com.advancedWiring.conditionalBeans; import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Value; /**
* Created by ${秦林森} on 2017/6/8.
*/
public class MagicBean implements BeanNameAware{ @Override
public void setBeanName(String name) {
System.out.println("The MagicBean's bean name is :"+name);
}
}
MagicExistsCondition的代码如下:
package com.advancedWiring.conditionalBeans; import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata; /**
* Created by ${秦林森} on 2017/6/8.
*/
public class MagicExistsCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
/**
* 如果环境包含magic这个属性,则返回true,反之为false
* 千万不要理解为MagicBean有magic这个属性返回true,反之为false.
*/
return environment.containsProperty("magic");
}
}
MapelConfig的代码如下:
package com.advancedWiring.conditionalBeans; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; /**
* Created by ${秦林森} on 2017/6/8.
*/
@Configuration
public class MapelConfig {
@Bean
@Conditional(MagicExistsCondition.class)
public MagicBean magicBean(){
return new MagicBean();
}
}
测试类Test的代码如下:
package com.advancedWiring.conditionalBeans; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* Created by ${秦林森} on 2017/6/8.
*/
public class Test {
public static void main(String[] args) {
/**
* 如果想让MagicExistsCondition返回true的话:
* System.setProperty("magic","这里的内容随便写");这句话不能少。
* 反之,如果不写上面的语句,则返回false.
*/
System.setProperty("magic","people");//这句话不能少。
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MapelConfig.class);
MagicBean magicBean = ac.getBean(MagicBean.class);
}
}
最新文章
- servlet使用入门
- 记录并分享一下安卓通讯录导入到IPhone
- css外边距合并和z-index的问题
- 最牛X的GCC 内联汇编
- iOS10 UI教程视图的边界与视图的框架
- Rhel6-cacti+nagios+ganglia(apache)配置文档
- linux消息队列的使用及内核实现原理
- SQL Server 2008数据库同步配置
- MEF 编程指南(四):声明导入
- OpenJudge 2753 菲波那契数列
- 实例解析C++虚表
- 超级易使用的jquery视频背景插件Vide
- C#中的USB库 WinUSB
- 算法学习 - 图的广度优先遍历(BFS) (C++)
- Webpack学习笔记(一)
- Day046--JavaScript-- DOM操作, js中的面向对象, 定时
- kaliLinux 安装 telnet
- Unity Shader 基础(1): RenderType &; ReplacementShader
- 按照勾选 删除表格的行<;tr>;
- [原]Docker-issue(1) image name 显示为 <;none>;