采用注解的方式来注入bean

1. 编写config类

  1. /**
  2. * @author 70KG
  3. * @Title: ConditionConfig
  4. * @Description:
  5. * @date 2018/7/22下午3:50
  6. * @From www.nmyswls.com
  7. */
  8. @Configuration
  9. public class ConditionConfig {
  10.  
  11. @Conditional(ConditionMatch1.class)
  12. @Bean
  13. public Goods m1() {
  14. System.out.println("将zhang放入IOC中。。。。");
  15. return new Goods("zhang", 24);
  16. }
  17.  
  18. @Conditional(ConditionMatch2.class)
  19. @Bean
  20. public Goods m2() {
  21. System.out.println("将jian放入IOC中。。。。");
  22. return new Goods("jian", 25);
  23. }
  24.  
  25. @Bean
  26. public Goods m3() {
  27. System.out.println("将bing放入IOC中。。。。");
  28. return new Goods("bing", 26);
  29. }
  30.  
  31. }

2. 编写condition类

  1. /**
  2. * @author 70KG
  3. * @Title: ConditionMatch1
  4. * @Description:
  5. * @date 2018/7/22下午3:53
  6. * @From www.nmyswls.com
  7. */
  8. public class ConditionMatch1 implements Condition {
  9.  
  10. // conditionContext:判断条件可以使用的上下文环境
  11. // annotatedTypeMetadata:注解的信息
  12. @Override
  13. public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
  14. Environment environment = conditionContext.getEnvironment();
  15. String property = environment.getProperty("os.name");
  16. if (property.contains("Mac")) {
  17. System.out.println("=====================");
  18. return true;
  19. }
  20. return false;
  21. }
  22. }

可见它实现了condition接口,目的就是在bean注入容器之前进行判断,符合条件的才注入容器。

3.编写测试类

  1. /**
  2. * @author 70KG
  3. * @Title: FutureTaskTest
  4. * @Description:
  5. * @date 2018/7/22下午3:49
  6. * @From www.nmyswls.com
  7. */
  8. public class Test01 {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. // IOC容器创建(容器类似一个Map)
  13. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConditionConfig.class);
  14.  
  15. System.out.println("IOC容器初始化完成。。。。。");
  16.  
  17. }
  18.  
  19. }

4. 测试结果:

  1. =====================
  2. zhang放入IOC中。。。。
  3. bing放入IOC中。。。。
  4. IOC容器初始化完成。。。。。

Spring源码窥探之:Condition的更多相关文章

  1. Spring源码窥探之:注解方式的AOP原理

    AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容 ...

  2. Spring源码窥探之:声明式事务

    1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId ...

  3. Spring源码窥探之:AOP注解

    AOP也就是我们日常说的@面向切面编程,看概念比较晦涩难懂,难懂的是设计理念,以及这样设计的好处是什么.在Spring的AOP中,常用的几个注解如下:@Aspect,@Before,@After,@A ...

  4. Spring源码窥探之:@Profile

    Spring为我们提供的多环境启动 1. 配置类,注入三个不同环境的数据源,并加上注解 /** * description: 以下准备了三套不同环境的数据源 * * @author 70KG * @d ...

  5. Spring源码窥探之:Spring AOP初步使用

    AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...

  6. Spring源码窥探之:@Value

    1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From w ...

  7. Spring源码窥探之:BeanPostProcessor

    Spring的Bean后置处理器 1. 实体类 /** * @author 70KG * @Title: Train * @Description: * @date 2018/7/23下午11:31 ...

  8. Spring源码窥探之:Spring AOP初步

    AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...

  9. Spring源码窥探之:单实例Bean的创建过程

    finishBeanFactoryInitialization(beanFactory);初始化剩下的所有的单实例(非懒加载)Bean(Instantiate all remaining (non-l ...

随机推荐

  1. XShell上传、下载本地文件到linux服务器

    Python之道发表于程序员八阿哥订阅 1.2K 腾讯云服务器 年付3折起 首次购买云服务器 最低3折起 超高性价比 限时抢购 Xshell很好用,然后有时候想在windows和linux上传或下载某 ...

  2. flask框架(六)——闪现(get_flashed_message)、请求扩展、中间件(了解)

    message -设置:flash('aaa') -取值:get_flashed_message() -假设在a页面操作出错,跳转到b页面,在b页面显示a页面的错误信息 1 如果要用flash就必须设 ...

  3. DS 壹之型 头指针与头结点

    之前结合网上博客整理的笔记,希望能帮你解除疑惑!    

  4. [LOJ6432] [PKUSC2018] 真实排名

    题目链接 LOJ:https://loj.ac/problem/6432 Solution 假设我们当前要算\(x\)的答案,分两种情况讨论: \(x\)没被翻倍,那么\([a_x/2,a_x]\)这 ...

  5. node-red 安装

    介绍 Node-RED背景介绍• Node-Red是IBM公司开发的一个可视化的编程工具.它允许程序员通过组合各部件来编写应用程序.这些部件可以是硬件设备(如:Arduino板子).Web API(如 ...

  6. 在 WPF 中获取一个依赖对象的所有依赖项属性

    原文:在 WPF 中获取一个依赖对象的所有依赖项属性 本文介绍如何在 WPF 中获取一个依赖对象的所有依赖项属性. 本文内容 通过 WPF 标记获取 通过设计器专用方法获取 通过 WPF 标记获取 p ...

  7. java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...

  8. React Native 开发豆瓣评分(四)集中管理 fetch 数据请求

    豆瓣评分的API接口 接口是从网上查找的,看样子应该是微信小程序里面扣出来的(ua 里面有 wechatdevtools) 接口都需要设置apiKey(054022eaeae0b00e0fc068c0 ...

  9. tp5模板中js方法中url函数传参的解决办法

    代码如下: layer.msg(data.msg, {icon: 1,time:1500,shade: 0.1}, function(index){ layer.close(index); var s ...

  10. adb命令获取app布局文件xml

    adb shell /system/bin/uiautomator dump --compressed /data/local/tmp/uidump.xml adb pull /data/local/ ...