一、简介

beanpostprocessor是spring ioc容器给我们提供的一个扩展接口。

实例化bean做前置处理、后置处理

二、接口定义

@component
public class beanpost  implements beanpostprocessor {
   /**
     * 在每个bean创建之后的初始化方法之前调用
     * @param bean 当前实例化的bean
     * @param beanname bean的名称
     * @return 返回实例化的bean或者可以对对象进行再封装返回
     * @throws beansexception
     */
    @override
    public  object postprocessbeforeinitialization(object bean, string beanname) throws beansexception {
        system.out.println("初始化前"+beanname);
        return bean;
    }
    /**
     * 在每个bean的初始化方法执行之后被调用
     * @param bean 当前实例化的bean
     * @param beanname bean的名称
     * @return 返回实例化的bean或者可以对对象进行再封装返回
     * @throws beansexception
     */
    @override
    public  object postprocessafterinitialization(object bean, string beanname) throws beansexception {
        system.out.println("初始化后"+beanname);
        return bean;
    }
}

运行顺序

实例化bean对象->设置对象属性->检查aware接口设置依赖

->beanpostprocessor前置处理->检查是否是initializingbean以决定是否调用afterpropertiesset方法->检查是否配置自定义init-method->beanpostprocessor后置处理->注册必要的destruction相关回调接口->。。。->是否实现disposablebean接口->是否配置自定义destroy方法

三、源码

1.由annotationconfigapplicationcontext进入

2.进入构造方法的refresh方法

3.进入到finishbeanfactoryinitialization方法

4.进入preinstantiatesingletons方法

5.执行getbean实例化方法

6创建bean实例

7.docreatebean

8.进入初始化接口

9.可以看到执行到了beanpostprocessor 提供的2个方法

进入内部可以看到

10.然后继续往下走开始aware流程

内部:

11.进入invokeawareinterfaces(bean);方法

内部:

当前bean实现了applicationcontextaware接口

12.走到person类中的setapplicationcontext方法

一入源码深似海,苦海无边,回头是岸

到此这篇关于spring源码解析之beanpostprocessor知识总结的文章就介绍到这了,更多相关beanpostprocessor的使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!