zoukankan      html  css  js  c++  java
  • Spring in action读书笔记(三) Spring Conditional注解应用-----条件化加载bean

    假设有一个名为MagicBean的类,只有设置了magic环境属性的时候,Spring才会实例化这个类。这时可以使用@Conditional注解

    package test.aop;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Conditional;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MagicBeanConfig {
    
        @Bean
        @Conditional(MagicExistsCondition.class)
        public MagicBean magicBean() {
            return new MagicBean();
        }
    
        static class MagicBean {
            private MagicBean() {
            }
        }
    }

    @Conditional注解中给定了一个class,它指明了条件,@Conditional接口建通过Condition接口进行条件对比,MagicExistsCondition类实现如下:

    package test.aop;
    
    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.env.Environment;
    import org.springframework.core.type.AnnotatedTypeMetadata;
    
    public class MagicExistsCondition implements Condition {
    
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            Environment env = context.getEnvironment();
            return env.containsProperty("magic");
        }
    }

    运行测试类,测试MagicBean能否被正确创建

    package test.aop;
    
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = {MagicBeanConfig.class})
    public class TestCondition {
    
        @Autowired(required = false)
        private MagicBeanConfig.MagicBean magicBean;
    
        @Test
        public void test() {
            Assert.assertNotEquals(magicBean, null);
        }
    }

    增加JVM参数  -Dmagic=true  再测试 MagicBean能否被创建

  • 相关阅读:
    dynamic不能使用扩展方法
    C# .Net 中字典Dictionary<TKey,TValue>泛型类 学习浅谈
    C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总
    Tomcat配置虚拟目录映射
    JAVA中令人疑惑的字符串
    JAVA控制台版斗地主
    JAVA学习路线
    vue安装(npm和cnpm)
    ThinkPad笔记本无法禁用触摸屏【亲测,有用】
    boostrap弹框之BootstrapDialog
  • 原文地址:https://www.cnblogs.com/wushengwuxi/p/11933033.html
Copyright © 2011-2022 走看看