我喜欢
@ConfigurationProperites
强大的打字和重构能力。我想要条件 bean,但不想使用 @ConditionalOnProperty
,因为它需要原始属性名称。
我尝试过这个方法
@Conditional(SecurityEnabledCondition.class)
@Bean ...
public class SecurityEnabledCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
ClientProperties clientProperties = context.getBeanFactory().getBean(ClientProperties.class);
return clientProperties.isSecured();
}
}
但是找不到 Bean,因为
Condition
并不是设计来与 Bean 交互的。如何在Spring中将@ConfigurationProperties与@Conditional一起使用?
Condition
实现不应与 bean 交互。这在该类的 javadoc 中有明确说明。
条件必须遵循与
相同的限制,并注意不要与 bean 实例交互。BeanFactoryPostProcessor
这是因为他们在流程的早期就在
BeanFactory
上进行操作,当时还没有任何豆子。如果您现在开始与 Bean 进行交互,将会导致 Bean 过早初始化等等。因此你不应该这样做。
您应该使用
@ConditionalOnProperty
并指定要检查的属性,或者您必须检查自定义 SecurityEnabledCondition
内的属性。但不要试图从上下文中获取 Bean。