• 条件化的Bean


    假设你需要某个Bean只有当某个特定的Bean声明了之后或者是只有某个环境变量设置之后才会创建,那么你可以使用下面的方法来实现。

    1.需要条件判断之后才创建的Bean

    @Bean
    @Conditional(Father.class)//调用Father类的matches方法判断,如果结果为true就创建这个
    //Bean,否则就不创建;设置给@Conditional的类可以是任何实现了Condition接口的类
    public Son getSon() {
        return new Son();
    }

    2.Father类的matches()方法如下:

    public class Father implements 
              org.springframework.context.annotation.Condition{
        @Override//实现了这个接口必须实现的方法
        public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) 
        {//判断是否存在环境变量OK,属性值无所谓,只要存在就可以,可通过  
        //System.setProperty("OK", "OK");设置该环境变量
            //Environment environment =arg0.getEnvironment();
            //return environment.containsProperty("OK");
            //判断是否存在这个Bean,可通过@Bean("father")设置Bean
            return arg0.getBeanFactory().containsBean("father");
        }
    }
    public class Son {//Son为一个空类
    
    }

    3.测试代码如下:

    @Configuration //声明配置文件
    @RunWith(SpringJUnit4ClassRunner.class)//使用junit测试
    @ContextConfiguration(classes=Main.class) 
    public class Main {
        @Autowired//申请自动装配
        public  Father father;
        @Autowired
        public  Son son;
    
        @Bean("father")//加载该Bean,如果将@Bean("father")注释,会同时导致两个
        //Bean(father和son)的自动装载失败
        public Father getFather() {
            return new Father();
        }
        @Bean//进入Father类的matches()方法判断是否加载该Bean
        @Conditional(Father.class)
        public Son getSon() {
            return new Son();
        }
        @Test
        public  void test() {
            if(father!=null) {
                System.out.println("father is not null!");
            }else {
                System.out.println("father is null!");
            }
    
            if(son!=null) {
                System.out.println("son is not null!");
            }else {
                System.out.println("son is null!");
            }
        }
    }

    参考资料:
    《Spring实战第四版》

  • 相关阅读:
    wkhtmktopdf
    linux命令行抓取网页快照
    ubuntu 固定静态IP
    $http questions
    generate_scripts
    network
    IT_Qestion
    day03
    day02
    day01
  • 原文地址:https://www.cnblogs.com/lizijuna/p/11907412.html
Copyright © 2020-2023  润新知