Spring条件注解@Conditional

在spring4中引入了基于条件创建Bean的注解@Coditional,@Conditional根据满足特定的条件创建一个特定的Bean。比如,当Spring容器中存在某个Bean时,我才创建当前的Bean等等…你可以根据自己的需要来加载Bean,利用这一特性你可以完成自动配置,springboot的自动配置就是根据条件注解@Conditional来实现的,下面我们来看一下如何来使用@Conditional做条件注解

1、我们先定义两个类、一个接口,然后两个接口实现类

public class ProdConfig {

}

public class TestConfig {

}


public interface ConfigBean {

  public void syaHello();

}

public class ProdConfigBean implements ConfigBean{
  @Override
  public void syaHello() {
    System.out.println("prod config");
  }
}

public class TestConfigBean implements ConfigBean {

  @Override
  public void syaHello() {
    System.out.println("test config");
  }
}

2、定义两个类,实现Condition接口

public class ProdConfigCondition implements Condition {

  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    return context.getBeanFactory().containsBean("prodConfig");
  }
}

public class TestConfigCondition implements Condition {

  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    return context.getBeanFactory().containsBean("testConfig");
  }
}

3、配置类

@Configuration
public class ProfileConfig {

  @Bean(name = "prodConfig")
  @Profile("prod")
  public ProdConfig javaConfig(){
    return new ProdConfig();
  }

  @Bean(name = "testConfig")
  @Profile("test")
  public TestConfig xmlConfig(){
    return new TestConfig();
  }

}


@Configuration
public class ConditionConfig {

  @Bean(name = "prodConfigTest")
  @Conditional(ProdConfigCondition.class)
  public ProdConfigBean prodConfigTest(){
    return new ProdConfigBean();
  }

  @Bean(name = "testConfigTest")
  @Conditional(TestConfigCondition.class)
  public TestConfigBean testConfigTest(){
    return new TestConfigBean();
  }

}


4、main方法验证

public class Main {

  public static void main(String[] args){
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.getEnvironment().setActiveProfiles("test");
    context.register(ProfileConfig.class);
    context.register(ConditionConfig.class);
    context.refresh();

    ConfigBean configTest = context.getBean(ConfigBean.class);
    configTest.syaHello();
    context.close();
  }
}

--------------------以下为输出--------------------
test config

从输出结果中可以看到,条件注解@Conditional根据profile的设置不同,来进行加载不同的Bean

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值