下面来介绍如何使用@Condition

  1. public class TestCondition implements Condition
  2. {
  3. /**
  4. * 只有返回true,才会启用配置
  5. */
  6. public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata)
  7. {
  8. return true;
  9. }
  10. }

@Conditional(TestCondition.class)

这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。

spring框架还提供了很多@Condition给我们用,当然总结用语哪种好理解,看给位读者喽

@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)

后续会继续补充

另一种总结

@ConditionalOnClass:该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类;
@ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。
 
接上文
condition自定义声明
public class InitConditional implements Condition{

    @Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//判断是否已经包含了amazonTest Bean
Boolean bol = conditionContext.getBeanFactory().containsBean("amazonTest");
return bol;
}
}

使用自定义的Conditional

@Component
@Conditional(InitConditional.class)
public class AmazonTest { @Autowired
private AmazonProperties amazonProperties; public void testGet(){
System.out.println(" testGet Associated");
System.out.println(amazonProperties.getAssociateId());
}
}

WelcomeController 与 AmazonTest关联,使用ConditionOnBean(如果条件的bean存在,当前的bean才会被声明)

@Component
@ConditionalOnBean(AmazonTest.class)
public class WelcomeController {
private static final Logger logger = LoggerFactory.getLogger(WelcomeController.class); private AppProperties app;
private GlobalProperties global; @Autowired
public void setApp(AppProperties app) {
this.app = app;
} @Autowired
public void setGlobal(GlobalProperties global) {
this.global = global;
} public void testWelcome(){
String appProperties = app.toString();
String globalProperties = global.toString();
System.out.println(appProperties);
System.out.println(globalProperties);
}
}

main测试文件入口

public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext =SpringApplication.run(DemoApplication.class, args);
//bean自动注册,根据bean的名字获取Bean
AmazonProperties amazonProperties = (AmazonProperties) configurableApplicationContext.getBean("amazonProperties");
System.out.println(amazonProperties.getAssociateId()); Boolean aBooleanWelcomeController = configurableApplicationContext.containsBean("welcomeController");
if(!aBooleanWelcomeController){
System.out.println(" welcomeController init fail");
}else{
WelcomeController welcomeController = (WelcomeController) configurableApplicationContext.getBean("welcomeController");
System.out.println(" welcomeController init Success");
} Boolean aBooleanAmazonTest = configurableApplicationContext.containsBeanDefinition("amazonTest");
if(!aBooleanAmazonTest){
System.out.println(" amazonTest init fail");
}else{
AmazonTest amazonTest = (AmazonTest) configurableApplicationContext.getBean("amazonTest");
System.out.println(" amazonTest init Success");
}
}

最新文章

  1. JavaScript通过id获取不到元素是什么原因阿?
  2. QuanbenSoft Windows Runtime (Windows Store)Apps 应用及其框架总览
  3. arduino 入手
  4. iOS中UITableView数据源刷新了,但tableview当中的cell没有刷新
  5. (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解
  6. SPRING IN ACTION 第4版笔记-第一章-003-AOP介绍
  7. Tomcat 80 端口被占,解决方案
  8. DataBase MongoDB高级知识-易扩展
  9. 【机器学习】--鲁棒性调优之L1正则,L2正则
  10. centos7下安装docker(dockerfile常用的指令)
  11. Day 1 上午
  12. H5测试点总结-UI测试、功能测试、兼容性测试、体验相关(弱网、资源、手机操作等)、安全性测试、性能测试
  13. 电脑修改密码后git上传失败Authentication failed
  14. 【UiPath 中文教程】02 - 创建自定义 Activity
  15. PHP-问题处理Fatal error: Uncaught Error: Call to undefined function mb_strlen()
  16. 缓存方案 通过SqlDependency实现Cache和Database的同步
  17. 前端框架之Vue(10)-全家桶简单使用实例
  18. UDP通讯协议实例
  19. 微软职位内部推荐-Senior Program Manager
  20. iOS8的一些控件的变更

热门文章

  1. java.lang.IndexOutOfBoundsException: setSpan (35 ... 35) ends beyond length 28
  2. Dlib与OpenCV图片转换
  3. 辞树的QAQ水题(字符串统计,思维)
  4. Linux内核电源管理综述
  5. 变量延迟(setlocal)之浅见
  6. java 中的 hashcode
  7. linux 知识点
  8. 百度,谷歌,360,搜狗,神马等蜘蛛IP段
  9. 未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包。(转)
  10. JQuery获得内容 - text()、html() 以及 val()