第十一章、后置处理Bean

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

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

在这里插入图片描述
假如实现了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细节

在这里插入图片描述
只要是在此配置文件中配置的对象,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教程后做的笔记。持续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值