[spring学习]5、bean的后置处理器(BeanPostProcessor)

小灰灰 2023-09-28 09:51 174阅读 0赞

目录

前言

基本说明

BeanPostProcessor的基本使用

实例应用

总结


前言

在这篇文章中,将会介绍bean的后置处理器,由于这个涉及到AOP的思想,这里不进行过多的深入,也就是不讲原理(后面文章会手写源码),这里只介绍后置处理器如何使用。


基本说明

在spring中,后置处理器会在bean初始化化之前和初始化之后进行调用,做相应的处理,我们可以在后置处理器中对bean进行统一的管理和操作


BeanPostProcessor的基本使用

我们要使用后置处理器,首先需要实现BeanPoatProcessor这个接口,下面我们创建一个类来实现这个接口。

de2add72928542779490e4d23eaafba8.png

在IDEA中,按ctrl+i,重写2个方法

e71d95a598604595bb3514a25e033897.png

postProcessBeforeInitialization和 postProcessAfterInitialization这2个方法,一个是在bean的初始化方法之前调用,一个是在bean初始化方法之后调用,它们的参数都是一样的,下面进行介绍

参数介绍

  • 第一个参数 Object:表示我们配置的bean对象
  • 第二个参数 String:就是我们配置bean时指定的名称
  • 返回值 Object:这个就是我们对bean处理后要进行返回的bean,返回后,spring容器的中的bean就是我们这里返回的bean

使用

创建好之后要进行配置才能生效,这个很简单,只需要将我们创建的后置处理器加入到spring容器即可,就像正常的bean那样配置就行

注意事项

后置处理器会对所有的bean都生效,使用时需要注意,也就是所有bean创建前和创建后都会调用我们配置的后置处理器的对应方法


实例应用

我们创建一个People类,该类有一个gender属性,一个describe属性,要求就是当我们创建时bean时,如果gender是男,describe就是这是一个男生,否则describe就是这是一个女生。

首先创建People类

  1. public class People {
  2. private String gender;
  3. private String describe;
  4. public String getGender() {
  5. return gender;
  6. }
  7. public void setGender(String gender) {
  8. this.gender = gender;
  9. }
  10. public String getDescribe() {
  11. return describe;
  12. }
  13. public void setDescribe(String describe) {
  14. this.describe = describe;
  15. }
  16. @Override
  17. public String toString() {
  18. return "People{" +
  19. "gender='" + gender + '\'' +
  20. ", describe='" + describe + '\'' +
  21. '}';
  22. }
  23. }

然后在xml中配置2个People,一个性别男,一个性别女

  1. <bean class="com.ttpfx.spring.practice.People" id="people01">
  2. <property name="gender" value="男"/>
  3. </bean>
  4. <bean class="com.ttpfx.spring.practice.People" id="people02">
  5. <property name="gender" value="女"/>
  6. </bean>

下一步就是创建我们的后置处理器

  1. public class MyBeanPostProcessor implements BeanPostProcessor {
  2. @Override
  3. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  4. //在bean创建好之后修改bean的内容
  5. //首先判断bean是不是一个People
  6. if (bean.getClass() == People.class) {
  7. //判断是不是男性
  8. if ("男".equals(((People) bean).getGender())) {
  9. //进行属性的设置
  10. ((People) bean).setDescribe("这时一个男生");
  11. }else {
  12. ((People) bean).setDescribe("这时一个女生");
  13. }
  14. }
  15. return bean;
  16. }
  17. }

将我们创建的后置处理器配置到xml文件中

  1. <bean class="com.ttpfx.spring.practice.MyBeanPostProcessor" id="beanPostProcessor"/>

创建测试方法进行测试

  1. @Test
  2. public void t2(){
  3. //创建spring容器
  4. ApplicationContext ioc = new ClassPathXmlApplicationContext("beans02.xml");
  5. //获取xml中配置的2个people
  6. People people01 = ioc.getBean("people01", People.class);
  7. People people02 = ioc.getBean("people02", People.class);
  8. //输出信息
  9. System.out.println(people01);
  10. System.out.println(people02);
  11. }

控制台输出

d943caa7360046cabc3db9dd346702a8.png


总结

后置处理器的使用并不难,甚至可以说是十分简单,但是要了解原理的话现在还有点早,这个得要AOP学了再说,后面的文章也会自己手写一个简单的spring,里面会将ioc以及aop的基础功能都进行实现

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读