手写spring6-BeanPostProcessor

2022-10-22 10:25:45

spring提供的一种扩展接口:BeanPostProcessor:Bean的后置处理器

前面讲的spring提供的扩展接口总结:BeanNameAware接口实现回调,InitializingBean接口实现初始化

BeanPostProcessor接口,用来在做某事之前、之后,完成某事。

BeanPostProcessor有很多子接口,比如:

InstantiationAwareBeanPostProcessor(实例化回调BeanPostProcessor)接口:实例化前方法、实例化后方法、属性赋值后方法。


在spring包中新建接口BeanPostProcessor

在zhouyu包中新建一个类ZhouyuBeanPostProcessor,实现接口和方法

spring会调用这两个方法,方法里面传的是bean对象和bean的名字。而ZhouyuBeanPostProcessor 就可以拿到对象和名字,然后在这两个方法体里面,想干啥就干啥。

在ZhouyuApplicationContext类的scan()方法中,添加上:

用于判断当前类clazz是不是实现了BeanPostProcessor接口,如果是,直接进行实例化

 scan的过程中,发现了实现了BeanPostProcessor的类,就实例化,并存到beanPostProcessorList里面,方便之后使用。

上图,实例化的方式不严谨,spring源码是用的getBean方法,从容器中取对象。

 实现了BeanPostProcessor的对象创建好了,也加入到list中了,如何使用这个对象?

比如在给某个对象初始化之前使用:

所以在createBean()方法中,初始化之前:

遍历beanPostProcessorList中的beanProcessor对象,并调用beanPostProcessor中的方法,把当前对象和对象名传进去。方法的具体逻辑实现,要程序员自己写

  • 作者:雾都金毛开花
  • 原文链接:https://blog.csdn.net/qq_34741652/article/details/122977918
    更新时间:2022-10-22 10:25:45