@Component
public class MyBean {
@Autowired
public MyBean(@Value("${optional:#{null}}") String optional) {
if (optional == null) {
// cancel bean creation?
}
}
}
如何默默取消bean创建?我可以抛出RuntimeException
,但我不希望这种取消被视为错误:必须不创建bean,应用程序初始化必须继续。
答案 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
属性注入。有关替代
第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/