【发布时间】:2015-06-26 21:49:00
【问题描述】:
我正在学习 Spring Core 认证,我对 Spring 如何处理 bean 生命周期,尤其是 bean 后处理器有一些疑问。
所以我有这个架构:
我很清楚这意味着什么:
以下步骤发生在加载 Bean 定义阶段:
@Configuration 类被处理和/或 @Components 被处理 扫描和/或 XML 文件被解析。
添加到 BeanFactory 的 Bean 定义(每个都在其 id 下编制索引)
调用特殊的BeanFactoryPostProcessor bean,它可以修改任何bean的定义(例如用于属性占位符值的替换)。
然后在beans创建阶段进行以下步骤:
默认情况下,每个 bean 都被急切地实例化(以正确的顺序创建并注入其依赖项)。
依赖注入后,每个 bean 都会经过一个后处理 可能发生进一步配置和初始化的阶段。
在后处理之后,bean 完全初始化并准备好使用(由其 id 跟踪,直到上下文被销毁)
好的,这对我来说很清楚,我也知道 有两种类型的 bean 后处理器,它们是:
Initializers:根据指示初始化 bean(即@PostConstruct)。
和所有其余部分:允许进行额外配置并且可以在初始化步骤之前或之后运行
我张贴这张幻灯片:
所以我很清楚 initializers bean 后处理器有什么作用(它们是带有 @PostContruct 注释的方法,并且在 setter 之后立即自动调用方法(所以在依赖注入之后),并且我知道我可以使用它来执行一些初始化批处理(如在前面的示例中填充缓存)。
但究竟什么代表了另一个 bean 后处理器?当我们说这些步骤在初始化阶段之前或之后执行时,我们的意思是什么?
所以我的 bean 被实例化并注入了它的依赖项,因此初始化阶段完成(通过执行 @PostContruct 注释方法)。在初始化阶段之前使用 Bean 后处理器是什么意思?这意味着它发生在 @PostContruct 注释方法执行之前?这是否意味着它可能发生在依赖注入之前(在调用setter方法之前)?
当我们说它在初始化步骤之后执行时,我们的确切意思是什么。这意味着它发生在执行 @PostContruct 注释方法之后,还是什么?
我很容易想到为什么我需要一个 @PostContruct 带注释的方法,但我想不出另一种 bean 后处理器的典型例子,你能给我一些典型的例子吗什么时候用的?
【问题讨论】:
-
我很确定你不应该分享幻灯片的图片 :)
-
@Reg 这些图片来自什么确切的课程/演示文稿?
-
@Malvon 这是上一期 Pivotal 官方 Spring 核心课程的内容。顺便说一句 - 如果您正在准备考试,请忽略 XML 的任何内容 :)
-
@Reg 有没有办法在不参加培训课程的情况下购买课程?
-
我想知道“后处理 Bean 定义”图表的紫色部分会发生什么?
标签: spring spring-mvc architecture