获取 ImportBeanDefinitionRegistrar 中的 ConfigurationProperties

Mat*_*aux 1 java spring-boot

我有一个@ConfigurationPropertiesPOJO。我希望能够在ImportBeanDefinitionRegistrar

@ConfigurationProperties("com.some.prefix")
public class VersionProperties {

    private List<String> someList;

    private String someString;
}
Run Code Online (Sandbox Code Playgroud)

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

com.some.prefix:
some-string: test
some-list:
  - v1
  - v3
Run Code Online (Sandbox Code Playgroud)

我有一个 AutoConfiguration 类,如下所示:

@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {

}
Run Code Online (Sandbox Code Playgroud)

这个Github Issue说,创建注册器BeanFactoryAware将允许访问配置属性 bean。

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

@Override
public void registerBeanDefinitions(
        AnnotationMetadata importingClassMetadata,
        BeanDefinitionRegistry registry
) {
    var props = beanFactory.getBean(SomeProperties.class);
    // all of props fields are null here
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*aux 7

问题是,这种情况ImportBeanDefinitionRegistrar在生命周期中发生得太早,无法ConfigurationProperties填写。因此,我必须创建我的注册器EnvironmentAware,然后使用BinderAPI 来填写ConfigurationPropertiesPOJO。

var props = Binder.get(environment)
            .bind("com.some.prefix", SomeProperties.class)
            .orElse(null);
Run Code Online (Sandbox Code Playgroud)