如何默默取消bean创建?

时间:2015-07-16 08:49:15

标签: java spring javabeans

@Component
public class MyBean {

  @Autowired
  public MyBean(@Value("${optional:#{null}}") String optional) {
    if (optional == null) {
      // cancel bean creation?
    }
  }

}

如何默默取消bean创建?我可以抛出RuntimeException,但我不希望这种取消被视为错误:必须不创建bean,应用程序初始化必须继续。

2 个答案:

答案 0 :(得分:2)

您可以在此处使用@Conditional

第1步 - 实施Condition.matches以指定何时应创建bean。

public class SomeCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return System.getProperty("optional") != null;
    }
}

条件类被称为直接类(而不是spring bean),因此它不能使用@Value属性注入。有关替代

,请参阅here

第2步 - 在配置类中,将上述类指定为 condition 以决定创建bean

@Configuration
public class SomeAppConfig {

    @Bean
    @Condition(SomeCondition.class)
    public MyBean myBean() {
      return new MyBean();
    }
}

P.S。:我假设您使用的是Java配置。

答案 1 :(得分:1)

这是不可能的。

如果你没有创建一个bean,你就无法使用它。它只是一个简单的Java类,在bean中使用/自动装配的属性是无用的。

但是,您可以为不同类型的环境配置配置文件基本配置Bean,例如' Dev','测试'或者'生产'。

https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/