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的過濾等,加載一些配置文件等等,都是一個非常好的時機,對於我們的項目而言也優雅很多,更多精彩,就靠大家挖掘了!!

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