我有一个@ConfigurationProperties POJO。我希望能够在ImportBeanDefinitionRegistrar中访问这个
@ConfigurationProperties("com.some.prefix")
public class VersionProperties {
private List<String> someList;
private String someString;
}我有一个具有以下属性的yaml文件
com.some.prefix:
some-string: test
some-list:
- v1
- v3我有一个AutoConfiguration类,它看起来像:
@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {
}这个Github问题说,使注册员BeanFactoryAware允许访问配置属性bean。
我已经这样做了,但是我遇到的问题是,在我的注册程序中,配置属性bean的所有字段都是空的。
@Override
public void registerBeanDefinitions(
AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry
) {
var props = beanFactory.getBean(SomeProperties.class);
// all of props fields are null here
}发布于 2019-09-24 14:37:43
问题是,ImportBeanDefinitionRegistrar在生命周期中发生得太早,无法填充ConfigurationProperties。因此,我必须让注册员EnvironmentAware,然后使用Binder API来填充ConfigurationProperties POJO。
var props = Binder.get(environment)
.bind("com.some.prefix", SomeProperties.class)
.orElse(null);发布于 2019-09-24 03:06:38
您可以从srping ApplicationContext获得一个bean,也可以使用@Bean进行注入。
@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {
@Bean
public void XXXX(SomeProperties someProperties) {
//you can get SomeProperties props here
}
}https://stackoverflow.com/questions/58070639
复制相似问题