我正在研究Spring Core认证,我对Spring如何处理bean的生命周期,尤其是bean后处理器有疑问。
所以我有这个架构:
我很清楚这是什么意思:
在“ 装入Bean定义”阶段执行以下步骤:
的@Configuration类被处理和/或@Components被扫描和/或XML文件进行解析。
Bean定义已添加到BeanFactory(每个索引均在其ID下进行索引)
调用特殊的BeanFactoryPostProcessor bean时,它可以修改任何bean的定义(例如,用于属性-占位符值的替换)。
然后,在Bean创建阶段执行以下步骤:
默认情况下,每个Bean都急切地实例化(以正确的顺序创建并注入了依赖项)。
依赖项注入后,每个bean都会进入后期处理阶段,在该阶段中可能会进行进一步的配置和初始化。
在后期处理之后,bean被完全初始化并可以使用(通过其id进行跟踪,直到上下文被销毁)
好的,这对我来说很清楚,我也知道有两种类型的Bean后处理器:
初始化程序:如果有指示,则初始化Bean(即@PostConstruct)。
和所有其余的:其允许额外的配置和其之前或初始化步骤之后运行
我张贴这张幻灯片:
所以对我来说很清楚初始化器 bean后处理器是什么(它们是用@PostContruct注释注释的方法,这些方法在setter方法之后立即自动调用(因此在依赖项注入之后),我知道我可以使用执行一些初始化批处理(如上例中那样填充缓存)。
但是,到底哪个代表另一个bean后处理器呢?当我们说这些步骤在初始化阶段之前或之后执行时,这是什么意思?
因此,实例化了我的bean并注入了它的依赖项,因此初始化阶段完成了(通过执行@PostContruct带注释的方法)。我们说在初始化阶段之前使用Bean后处理器是什么意思?这意味着它发生在@PostContruct注释方法执行之前?这是否意味着它可能发生在依赖项注入之前(在调用setter方法之前)?
当我们说它是在初始化步骤之后执行时,我们到底是什么意思。这意味着它会在执行@PostContruct带注释的方法之后发生,还是什么?
我可以很容易地想到为什么我需要一个@PostContruct带注释的方法,但是我无法弄清楚另一种bean后处理器的典型示例,您能告诉我一些什么时候使用的典型示例吗?