我们使用自定义 Bean 定义注册一些 bean,在 BeanPostProcessor 中我们需要访问 bean 定义
public Object postProcessBeforeInitialization(Object bean, String beanName)
我可以让它成为 ApplicationContextAware 然后执行以下操作:
((ConfigurableApplicationContext)applicationContext).getBeanFactory().getBeanDefinition(beanName)
但是否可以确保应用程序上下文始终是可配置的应用程序上下文?有没有另一种方法可以从 BeanPostProcessor 访问 Bean 定义?
如果需要访问BeanDefinition
实例,则应使用 BeanFactoryPostProcessor
而不是 BeanPostProcessor
。
BeanFactoryPostProcessor
允许对应用程序上下文的 Bean 进行自定义修改 定义,调整上下文的 Bean 属性值 底层豆厂。BeanFactoryPostProcessor 可以与 Bean 定义交互并修改它们,但从来不能修改 Bean 实例。
BeanPostProcessor
工厂钩子,允许自定义修改新豆 实例,例如检查标记接口或用 代理。