欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring源码解析之BeanPostProcessor知识总结

程序员文章站 2022-04-05 12:33:54
一、简介beanpostprocessor是spring ioc容器给我们提供的一个扩展接口。实例化bean做前置处理、后置处理二、接口定义@componentpublic class beanpos...

一、简介

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进入

Spring源码解析之BeanPostProcessor知识总结

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

Spring源码解析之BeanPostProcessor知识总结

3.进入到finishbeanfactoryinitialization方法

Spring源码解析之BeanPostProcessor知识总结

4.进入preinstantiatesingletons方法

Spring源码解析之BeanPostProcessor知识总结

5.执行getbean实例化方法

Spring源码解析之BeanPostProcessor知识总结

6创建bean实例

Spring源码解析之BeanPostProcessor知识总结

7.docreatebean

Spring源码解析之BeanPostProcessor知识总结

8.进入初始化接口

Spring源码解析之BeanPostProcessor知识总结

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

Spring源码解析之BeanPostProcessor知识总结

进入内部可以看到

Spring源码解析之BeanPostProcessor知识总结

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

Spring源码解析之BeanPostProcessor知识总结

内部:

Spring源码解析之BeanPostProcessor知识总结

11.进入invokeawareinterfaces(bean);方法

Spring源码解析之BeanPostProcessor知识总结

内部:

当前bean实现了applicationcontextaware接口

Spring源码解析之BeanPostProcessor知识总结

12.走到person类中的setapplicationcontext方法

Spring源码解析之BeanPostProcessor知识总结

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

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