问题描述
@Component
public class MyBean {
@Autowired
public MyBean(@Value("${optional:#{null}}") String optional) {
if (optional == null) {
// cancel bean creation?
}
}
}
如何默默取消bean创建?
我可以抛出RuntimeException
,但我不希望将此取消视为错误:必须不创建bean,应用程序初始化必须继续。
1楼
在这里你可以使用
步骤1 - 实现以指定何时应该创建bean。
public class SomeCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return System.getProperty("optional") != null;
}
}
条件类称为直接类(而不是spring bean),因此它不能使用@Value
属性注入。
请看替代
步骤2 -在配置类指定上述类作为条件来决定bean创建
@Configuration
public class SomeAppConfig {
@Bean
@Condition(SomeCondition.class)
public MyBean myBean() {
return new MyBean();
}
}
PS :我假设您使用Java配置。
2楼
这是不可能的。
如果您不创建bean,则无法使用它。 它只是一个简单的Java类,在bean中使用/自动装配的属性是无用的。
但是,您可以为不同类型的环境配置配置文件基本配置Bean,例如“Dev”,“Test”或“Production”。