在spring中 BeanFactoryPostProcessor, BeanFactoryAware的区别?

在spring中 BeanFactoryPostProcessor获取了 beanFactory 后能够对BeanDefinition进行修改,为什么 BeanFactoryAware 获取的beanfactory 对属性的修改不生效?如果是状态更改导致的?那么是哪个状态呢?记录下这个问题,等看完源码在回头看看问题

阅读 2.4k
1 个回答

答案是加载顺序的问题,BeanFactoryAware 如果先于 需要过滤的 BeanDefinition 加载,就能够修改,如果位置靠后,实例已经生成,修改直接无效,所以不适合,但并不是不行,可以删除重新注入(不是最佳实践而已)。BeanFactoryPostProcessor 属于 ApplicationContext 优先加载的bean 所以在获取的时候先于普通Bean,对普通 bean 能够方便操作,而对BeanFactoryAware 确没有支持。BeanFactoryAware 的功能仅限于AbstractAutowireCapableBeanFactoryBeanWraper 生成之后判断下,如果是,调用下而已,不能做什么保证。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题