spring-灵魂深处 关于beanPostProcesor

        在spring中有beanPostProcesor这个类,这个类主要用到spring的IOC中,但是要说清楚这个类,前提还是要理解spring的IOC的设计思想。

        spring的IOC一般理解是字面意思依赖注入、控制翻转,这样理解还是太泛化,不够详细,因为还是触及不到核心,又有人说IOC不就是spring帮忙托管对象实例,不用再一个一个new出来,这样理解也是正确的,但是还是没有触及到最核心部分。spring的IOC设计初衷我想应该不仅是托管对象实例,还要理清对象实例之间的关系,还可以根据相关情况返回代理对象,并且还要做了相应的前后置的处理,这种前后置的处理就是我们今天的主角-beanPostProcesor。


spring-灵魂深处 关于beanPostProcesor_第1张图片
beanPostProcessor接口结构

主要理解的是以上接口结构。

beanPostProcessor是根类,所有前后置均源于此,此外还有继承自beanPostProcessor的MergedBeanDefinitionPostProcessor,这个MergedBeanDefinitionPostProcessor很重要,它主要的功能是调整RootBeanDefinition的参数,在实例化对象之后,注入参数之前修改RootBeanDefinition以达到修改注入参数的目的(这个很重要)。

以来注入流程图如下:


spring-灵魂深处 关于beanPostProcesor_第2张图片
IOC流程图

         我整理出了spring依赖注入的详细流程图,在上面这个流程图当中详细说明了每一个步骤中具体做了什么,还说明了我们在哪里可以扩展些什么。

        综上所述,spring的IOC是个超级bean管理容器,并且在初始化过程中还可以完成以下几种操作:

1、用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation

            1)方法返回代理对象来替代、增强原对象(例如:aop)

            2)也可以修改即将要注入的值

2、用MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition修改bean的定义

3、用InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法来注入值

你可能感兴趣的:(spring-灵魂深处 关于beanPostProcesor)