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中的方法,把当前对象和对象名传进去。方法的具体逻辑实现,要程序员自己写