@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);
}
}

最新文章

  1. servlet使用入门
  2. 记录并分享一下安卓通讯录导入到IPhone
  3. css外边距合并和z-index的问题
  4. 最牛X的GCC 内联汇编
  5. iOS10 UI教程视图的边界与视图的框架
  6. Rhel6-cacti+nagios+ganglia(apache)配置文档
  7. linux消息队列的使用及内核实现原理
  8. SQL Server 2008数据库同步配置
  9. MEF 编程指南(四):声明导入
  10. OpenJudge 2753 菲波那契数列
  11. 实例解析C++虚表
  12. 超级易使用的jquery视频背景插件Vide
  13. C#中的USB库 WinUSB
  14. 算法学习 - 图的广度优先遍历(BFS) (C++)
  15. Webpack学习笔记(一)
  16. Day046--JavaScript-- DOM操作, js中的面向对象, 定时
  17. kaliLinux 安装 telnet
  18. Unity Shader 基础(1): RenderType & ReplacementShader
  19. 按照勾选 删除表格的行<tr>
  20. [原]Docker-issue(1) image name 显示为 <none>

热门文章

  1. 判断StringBuilder 是否为空
  2. Hbase学习指南
  3. SqlServer2008/2005数据库日志收缩
  4. Ado访问sqlserver 端口号非1433时 连接串的写法
  5. McNay Art Museum【McNay艺术博物馆】
  6. GDOI--DAY2 游记
  7. 第三章 文件 I/O
  8. HyperLedger Fabric 1.4 区块链技术定义(2.1)
  9. Kubernetes-简介(一)
  10. 集合源码分析之 HashSet