spring步步前行(IOC)-大战BeanPostProcessor

spring步步前行(IOC)-大战BeanPostProcessor

在之前的文章中,我们分析了整个beanFactory,其中有一些配置我们还是不怎么清楚,这一篇,我们仔细的分析BeanPostProcessor这个类的作用和存在的意义,并举一些实例辅助我们理解BeanPostProcessor

官方解读

首先我们看看官方对于BeanPostProcessor

在这里插入图片描述

这个接口设计的是个相对factory的相关hook,具体功能是允许自定义修改新创建bean的实例,其具体描述ApplicationContexts会在对应的bean的definitions中自动检测BeanPostProcessor,且在创建的任意bean后应用它,还可以通过factory给其他类进行注册使用

讲到这里,我们可以发现BeanPostProcessor就是spring 给了我们一个修改bean的契机,我们通过beanDefinition查找到目标类,紧接着spring进行实例化该类,这样我们就得到了目标bean,但是出于业务或其他等考虑,我们想对bean做一些更改,这个时候beanPostProcessor就是大发神威的时候了

到这里,我们看看其具体的方法:

postProcessBeforeInitialization

在这里插入图片描述

注意before,所以这个方法是作用BeanPostProcessor在初始化之前进行处理

postProcessAfterInitialization

在这里插入图片描述

注意after,所以这个方法是作用BeanPostProcessor在初始化之后进行处理

以上就是beanPostProcessor的具体方法和官方解读,下面搞几个例子,辅助解下beanPostProcessor毒,让我们形成记忆神经元,哈哈哈

实例

先上一个简易demo

首先我们先构建一个springboot环境,并创建一个我们调试的bean:

public class ClazzBean {
    public String name;
    public String clazz;
    @Override
    public String toString() {
        return "ClazzBean{" +
                "name='" + name + '\'' +
                ", clazz='" + clazz + '\'' +
                '}';
    }
}

接着我们想springboot容器中声明我们测试bean:

@Bean
public ClazzBean getClazzBean() {
  return new ClazzBean();
}

最后我们创建一个实现了BeanPostProcessor的Processor类,如下:

在这里插入图片描述

接下来我们看看结果:

在这里插入图片描述

我们可以看到,我们的BeanPostProcessor已经生效了。可能还有人迷惑,生效了我们能干嘛用,下面再举一个例子,抛砖引玉下

Demo2:

这里我不打算新写一个demo,我们在原有的demo1上进行修改,用来加深记忆,接下来我们要实现一个功能,

功能如下:

  • 1.我们目标bean永远返回为json格式
  • 2.若我们目标bean一些需要的成员变量没有被赋值,就赋值上我们给的默认初始值

不过我们还需要临时准备一些工具

  • 创建一个注解

    在这里插入图片描述

  • 然后我们修改一下我们的目标bean

    在这里插入图片描述

  • 最后我们改动下我们的beanPostProcessor

    • 对于postProcessBeforeInitialization而言,我们做如下改动

      在这里插入图片描述

    • 对于postProcessAfterInitialization而言,我们做如下改动

      在这里插入图片描述

在这里插入图片描述

注意after之后的格式已经变成我们需要的json格式了,而目标bean也赋值上了我们的默认值

结语

到这我们对BeanPostProcessor的抛砖引玉也就结束了,但是对BeanPostProcessor的应用远不止于此,相信细心的童鞋在springboot这个架子中,本身就有很多对BeanPostProcessor的应用,不失为我们学习的一些标准代码哦~

举一些小例子好比我们对一些数据的筛选,以及数据bean的过滤等,加载一些配置文件等等,都是一个非常好的时机,对于我们的项目而言也优雅很多,更多精彩,就靠大家挖掘了!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章