我在属性文件中定义了一个属性:property=true
然后我有了SomeClass.java
类,如果属性property
设置为true,则应该仅创建一个属性配置bean。
这是我的SomeClass
类:
public class SomeClass {
//this is the proerty which I set to true or false
@Value("${property}")
private String property;
//this is the bean which needs to be created conditionally based on the property but at the moment it does not get created
@Bean
@ConditionalOnProperty(name="${property}", havingValue="true")
public PropertyConfiguration propertyConfig() {
// doesnt print anything because the bean does not get created
System.out.print(property);
}
}
如果我在@ConditionalOnProperty
中添加matchIfMissing = true
,只是为了进行实验,看看property
的值是多少,那么bean确实被创建了,我看到property
的值是true
。
如果我删除matchIfMissing = true
,将条件保留为@ConditionalOnProperty(name="${property}", havingValue="true")
,并将属性property=true
从true
更改为false
,则永远不会创建bean(无论是对于true
还是对于false
(。
如果bean是根据属性有条件创建的,我该怎么办?
请在您的类上添加@Configuration
。
组件扫描不包括您的类,为此需要在类的顶部添加@Component
或任何其他继承的注释。那么你的@Bean
应该是从春天开始创建的。
希望这能有所帮助。