BeanFactoryPostProcessor

BeanFactoryPostProcessor

我正在尝试创建一些可以根据可配置属性(来自 application.yml 等)自动创建 bean 的东西。

由于我不能像往常一样在 BeanFactoryPostProcessor 中访问 properties 组件,因此我对如何访问它们感到困惑。

如何访问 BeanFactoryPostProcessor 中的应用程序属性?

最佳答案

如果您想在 BeanFactoryPostProcessor 中以类型安全的方式访问属性,您需要使用 Environment API 自己从 Binder 绑定(bind)它们。这本质上是 Boot 本身为支持 @ConfigurationProperties bean 所做的。

你的 BeanFactoryPostProcessor 看起来像这样:

@Bean
public static BeanFactoryPostProcessor beanFactoryPostProcessor(
        Environment environment) {
    return new BeanFactoryPostProcessor() {

        @Override
        public void postProcessBeanFactory(
                ConfigurableListableBeanFactory beanFactory) throws BeansException {
            BindResult<ExampleProperties> result = Binder.get(environment)
                    .bind("com.example.prefix", ExampleProperties.class);
            ExampleProperties properties = result.get();
            // Use the properties to post-process the bean factory as needed
        }

    };
}

10-08 04:27