首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取ConfigurationProperties in ImportBeanDefinitionRegistrar

获取ConfigurationProperties in ImportBeanDefinitionRegistrar
EN

Stack Overflow用户
提问于 2019-09-23 21:52:07
回答 2查看 647关注 0票数 0

我有一个@ConfigurationProperties POJO。我希望能够在ImportBeanDefinitionRegistrar中访问这个

代码语言:javascript
复制
@ConfigurationProperties("com.some.prefix")
public class VersionProperties {

    private List<String> someList;

    private String someString;
}

我有一个具有以下属性的yaml文件

代码语言:javascript
复制
com.some.prefix:
some-string: test
some-list:
  - v1
  - v3

我有一个AutoConfiguration类,它看起来像:

代码语言:javascript
复制
@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {

}

这个Github问题说,使注册员BeanFactoryAware允许访问配置属性bean。

我已经这样做了,但是我遇到的问题是,在我的注册程序中,配置属性bean的所有字段都是空的。

代码语言:javascript
复制
@Override
public void registerBeanDefinitions(
        AnnotationMetadata importingClassMetadata,
        BeanDefinitionRegistry registry
) {
    var props = beanFactory.getBean(SomeProperties.class);
    // all of props fields are null here
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-24 14:37:43

问题是,ImportBeanDefinitionRegistrar在生命周期中发生得太早,无法填充ConfigurationProperties。因此,我必须让注册员EnvironmentAware,然后使用Binder API来填充ConfigurationProperties POJO。

代码语言:javascript
复制
var props = Binder.get(environment)
            .bind("com.some.prefix", SomeProperties.class)
            .orElse(null);
票数 5
EN

Stack Overflow用户

发布于 2019-09-24 03:06:38

您可以从srping ApplicationContext获得一个bean,也可以使用@Bean进行注入。

代码语言:javascript
复制
@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {
    @Bean
    public void XXXX(SomeProperties someProperties) {
        //you can get SomeProperties props here
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58070639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档