我正在尝试创建一些可以根据可配置属性(来自 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
}
};
}