当前位置: 首页 > 知识库问答 >
问题:

BeanFactoryPostProcessor是否修改实际的bean定义而不是实例?

乌修筠
2023-03-14

下面是BeanFactoryPostProcessor的简要功能

BeanFactoryPostProcencer允许您修改实际的bean定义,而不是创建它时的实例。Spring IoC容器将允许BeanFactoryPostProcess读取配置元数据,并可能在容器实际实例化任何bean之前对其进行更改。属性持有人配置是BeanFactoryPostProcess的示例,用于将一些属性值外部化到另一个Java属性格式的单独文件中

我从上面了解到的是BeanFactoryPostProcessor在应用程序上下文开始时(即在应用程序位置加载时)修改bean定义。但我没有得到它是否会在文件或内存中物理地更改类定义。

我正在我的项目中使用PropertyPlaceHolderConfigure。为了验证它,一旦应用程序启动,我就转到类路径并在反编译器中打开类文件,不管propert{test.property}是否被替换为实际值。不是。那么spring会修改内存中的类定义吗?

共有2个答案

闻人嘉悦
2023-03-14

BeanFactoryPostProcessor可以更改/添加BeanDefinition

bean定义只是描述bean的元数据

  • 豆子的名字
  • 要实例化的类
  • 要注入的属性
  • 依赖关系

它在xml中等价于

史默
2023-03-14

BeanFactoryPostProcess不会更改物理类定义。在大多数生产中的应用程序中,运行应用程序的用户甚至无权“写入”文件。所有修改都在加载类后发生。因此,当您需要bean实例时,Spring会加载bean定义(但不会实例化“任何”实例),应用已注册的bean工厂后处理器,然后创建一个实例(然后应用bean后处理器,这与bean工厂后处理器不同),然后只返回bean。

 类似资料:
  • 我有三节课。 > 一个抽象类,abstractA有一个受保护的构造函数 一个类扩展了抽象类,父类有两个构造函数 一个类扩展父类,子类有一个构造函数 这是从抽象类扩展而来的父类 这是从父类扩展而来的子类 自定义组件看起来像这样 所以,当spring为特定测试实例化所有bean时,它会正确地实例化子bean。当父bean被实例化时,它得到2个bean[父和子]。所以,我最终会出错, 类型父的多个bea

  • 豆子工厂的文件里说 由包含许多bean定义的对象实现 如果BeanFactory或ApplicationContext(也是BeanFactory)持有bean定义,那么哪个类负责持有实际的bean? 据说豆子工厂也是 用于访问Spring bean容器的根接口 这个容器是什么类?

  • 我知道有很多与此相关的问题,但我似乎找不到一个能帮助我解决问题的答案。 我正在使用os.walk()循环浏览主文件夹中的子文件夹,其中包含文件夹和文件。 因此,我使用这段代码根据子文件夹名称创建一个新的文本文件。但是,这将返回folder/.txt,这意味着dirs将返回“/”,而files将返回['file.txt','file2.txt']。 如何修复它,使dirs返回['主文件夹/传递文件夹

  • 问题内容: 假设我有一个DIV:我想用JS找出它的 行高 。我知道可以检查style属性,但是我想检查 实际的 line-height ,而没有它取决于CSS规则的存在。 假设字体系列和字体大小相同,则两者应输出相同的 line-height : 如何使用JavaScript 获取元素的 行高 ? 问题答案: 答案实际上是使用。正如 Gaby 所说,这并不是真正可靠/可信赖的。但是,是!这里: 将

  • 这可能吗?。。OsCommerce需要这些设置, 全局寄存器-- 但不幸的是,我不允许编辑php。ini文件,因为共享主机。。还有别的办法吗?我只有FTP访问权限。 编辑: PHP版本5.2。17 服务器API CGI/FastCGI

  • 问题内容: 在运行之前,我需要检查是否已安装“ mocha”。我想出了以下代码: 我不喜欢这个例外。有没有更好的办法? 问题答案: 您应该使用而不是。如果找到将加载库,但不会加载,它将返回模块的文件名。 请参阅文档以了解require.resolve 如果未找到模块,则require.resolve()会引发错误,因此您必须对其进行处理。