第十一章、后置处理Bean

BeanPostProcessor作⽤:对Spring⼯⼚所
创建的对象,进⾏再加⼯。
AOP底层实现:
注意:BeanPostProcessor接⼝
 xxxx(){
 }

1.后置处理Bean的运⾏原理分析

第十一章、后置处理Bean_第1张图片
假如实现了BeanPostProcessor接口。
顺序:
1.反射通过调用构造方法创建对象。
2.DI注入。
3.postProcessBeforeInitiallization()方法加工。
4.postProcessBeforeInitiallization()方法加工后通过返回值将对象交给Spring。
5.InitializingBean初始化和自定义的初始化操作后Spring将对象交给postProcessAfterInitiallization()方法。
6.postProcessAfterInitiallization()方法加工。
7.postProcessAfterInitiallization()方法加工后通过返回值将对象交给Spring。
8.Spring再把对象交换给客户。让客户使用。

程序员实现BeanPostProcessor规定接⼝中的⽅法:
Object postProcessBeforeInitiallization(Object bean String beanName)
作⽤:Spring创建完对象,并进⾏注⼊后,可以运⾏Before⽅法进⾏加⼯获得Spring创建好的对象 :通过⽅法的参数最终通过 return 返回值交给Spring框架.
Object postProcessAfterInitiallization(Object bean String beanName)
作⽤:Spring执⾏完对象的初始化操作后,可以运⾏After⽅法进⾏加⼯
获得Spring创建好的对象 :通过⽅法的参数最终通过 return 返回值交给Spring框架。

实战中:
很少处理Spring的初始化操作:没有必要区分Before After。只需要实现其中的⼀个After⽅法即可。
注意:
只实现After方法时也要将Before 方法写出来 只是方法内不写代码,只需要将对象返回给Spring。Before方法可以什么都不做,但是要把对象给Spring。然后Spring再把对象给After方法。即:

Object postProcessBeforeInitiallization(Object bean String beanName){
 return bean对象
}
Object postProcessAfterInitiallization(Object bean String beanName){
    
--------    实现代码   ------------
    return bean对象
    
}

2.BeanPostProcessor的开发步骤

步骤1.类 实现 BeanPostProcessor接⼝

public class MyBeanPostProcessor implements BeanPostProcessor{
 @Override
 public Object postProcessBeforeInitialization(Object bean, String
beanName) throwsBeansException {
 return bean;
 }
 @Override 
 public Object postProcessAfterInitialization(Object bean, String
beanName) throws BeansException {
 Categroy categroy = (Categroy) bean;//因为是Object类型 所以要强转一下
 categroy.setName("xiaowb");
 return categroy;
 }
}

步骤2.Spring的配置⽂件中进⾏配置

<bean id="myBeanPostProcessor" class="xxx.MyBeanPostProcessor"/>

3.BeanPostProcessor细节

第十一章、后置处理Bean_第2张图片
只要是在此配置文件中配置的对象,MyBeanPostProcessor都会对它们进行加工。而MyBeanPostProcessor可能只需要传其中的一个对象,所以需要判断一下。

将下面这段代码:
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
 Categroy categroy = (Categroy) bean;//因为是Object类型 所以要强转一下
 categroy.setName("xiaowb");
 return categroy;
 }
改成:
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    if(bean instanceof Categroy){
 Categroy categroy = (Categroy) bean;//因为是Object类型 所以要强转一下
 categroy.setName("xiaowb");
    }
 return bean;//这里返回bean或者categroy都可以 因为此时bean已经被强转成categroy
 }

本系列文章从Spring5原理开始深入浅出,从工厂特性=>依赖注入–IOC=>AOP编程=>Spring事务=>纯注解开发。本文来自观看B站孙帅Spring教程后做的笔记。持续更新…

你可能感兴趣的:(Spring,spring,java,spring,boot)