以下是BeanFactoryPostProcessor的简要介绍
BeanFactoryPostProcessor允许您修改实际的bean定义 而不是它创建的实例.Spring IoC容器将 允许BeanFactoryPostProcessors读取配置元数据和 在容器实际实例化之前可能会更改它 任何豆子。 PropertyPlaceholderConfigurer就是一个例子 BeanFactoryPostProcessors将一些属性值外部化 Java Properties格式的另一个单独文件
我从上面了解到,BeanFactoryPostProcessor在应用程序上下文的开头修改bean定义(即applocation加载时)。 但我没有得到它在文件或内存中物理更改类定义。
我正在我的项目中使用PropertyPlaceholderConfigurer。为了验证它,一旦应用程序启动,我去了类路径并在反编译器中打开类文件 属性{test.property}是否被实际值替换。不是。那么spring会修改内存中的类定义吗?
答案 0 :(得分:1)
BeanFactoryPostProcessor不会更改物理类定义。在生产中的大多数应用程序中,运行应用程序的用户甚至无法访问“写入”。到文件。加载类后,所有修改都会发生。因此,当您需要一个bean实例时,Spring将加载bean定义(但不会实例化任何'实例),应用已注册的bean工厂后处理器,然后创建一个实例(然后应用bean post处理器,它与bean factory post处理器不同)然后只返回bean。
答案 1 :(得分:0)
BeanFactoryPostProcessor
可以更改/添加 BeanDefinition
BeanDefinition只是描述bean的元数据:
它是<bean id=".." class=".."/>
标记