Spring BeanPostProcessor最佳實踐

  • 擴展點簡述

Factory hook that allows for custom modification of new bean instances — for example, checking for marker interfaces or wrapping beans with proxies. Typically, post-processors that populate beans via marker interfaces or the like will implement {@link #postProcessBeforeInitialization}, while post-processors that wrap beans with proxies will normally implement {@link #postProcessAfterInitialization}.

  • 擴展點的生命周期及擴展點的執(zhí)行時機

屬于Bean的實例化階段擴展,針對于任何Bean的實例化兜辞。
執(zhí)行時機分別位于InitializingBean's afterPropertiesSet方法或者init-method之前和之后鹤耍,
此時Bean以及實例化完成,對象屬性已經注入弄跌。

  • 擴展點的作用

對實例化Bean做進一步的處理,在擴展時機前后調用尝苇,把控好時機擴展就好铛只。
比如做一些注解配置的處理等埠胖,其他的博主暫時想不到有好的玩法/(ㄒoㄒ)/~~

  • 擴展點實戰(zhàn)

/**
 * BeanPostProcessor接口默認實現(xiàn)了postProcessBeforeInitialization和postProcessAfterInitialization兩個方法,
 * 作用范圍:任何Bean實例化對象
 * 方法執(zhí)行時機:參照各方法注釋
 */
@Component
public class TestBeanPostProcess implements BeanPostProcessor {

    /**
     * Apply this {@code BeanPostProcessor} to the given new bean instance <i>before</i> any bean
     * initialization callbacks (like InitializingBean's {@code afterPropertiesSet}
     * or a custom init-method).
     *
     * 執(zhí)行時機:InitializingBean's afterPropertiesSet方法或者init-method之前執(zhí)行淳玩。
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor-Before: " + beanName);
        return bean;
    }

    /**
     * Apply this {@code BeanPostProcessor} to the given new bean instance <i>after</i> any bean
     * initialization callbacks (like InitializingBean's {@code afterPropertiesSet}
     * or a custom init-method).
     * <p>In case of a FactoryBean, this callback will be invoked for both the FactoryBean
     * instance and the objects created by the FactoryBean (as of Spring 2.0).
     *
     * 執(zhí)行時機:InitializingBean's afterPropertiesSet方法或者init-method之后直撤。
     *
     * 注意:Spring2.0后,F(xiàn)actoryBean也要走這個方法蜕着。
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor-After: " + beanName);
        return bean;
    }
}
  • BeanPostProcessor的擴展資料

不僅可以實現(xiàn)BeanPostProcessor擴展谊惭,Spring還有一些他的子類也提供了擴展:

  • DestructionAwareBeanPostProcessor
    在銷毀該BeanPostProcessor之前,將其應用于給定的bean實例侮东。
    例如圈盔,調用自定義銷毀回調。像DisposableBean的destroy和自定義destroy方法一樣悄雅,
    此回調僅適用于生命周期完全被容器管理的Bean驱敲。 單例和作用域bean通常是這種情況。

  • InstantiationAwareBeanPostProcessor
    添加了實例化之前的回調宽闲,以及在實例化之后但設置了顯式屬性或發(fā)生自動裝配之前的回調众眨。
    通常用于抑制特定目標Bean的默認實例化,例如創(chuàng)建具有特殊TargetSource的代理(池目標容诬,延遲初始化目標等)娩梨,或實現(xiàn)其他注入策略,例如字段注入览徒。
    但官方說這個一般應用于內部代碼狈定,所以擴展須掌握會具體影響到哪些Bean。

更多Spring擴展請查看專題Spring開發(fā)筆記习蓬。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末纽什,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躲叼,更是在濱河造成了極大的恐慌芦缰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枫慷,死亡現(xiàn)場離奇詭異让蕾,居然都是意外死亡,警方通過查閱死者的電腦和手機或听,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門探孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人神帅,你說我怎么就攤上這事再姑。” “怎么了找御?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵元镀,是天一觀的道長。 經常有香客問我霎桅,道長栖疑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任滔驶,我火速辦了婚禮遇革,結果婚禮上,老公的妹妹穿的比我還像新娘揭糕。我一直安慰自己萝快,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布著角。 她就那樣靜靜地躺著揪漩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吏口。 梳的紋絲不亂的頭發(fā)上奄容,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音产徊,去河邊找鬼昂勒。 笑死,一個胖子當著我的面吹牛舟铜,可吹牛的內容都是我干的戈盈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼谆刨,長吁一口氣:“原來是場噩夢啊……” “哼奕谭!你這毒婦竟也來了?” 一聲冷哼從身側響起痴荐,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤血柳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后生兆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體难捌,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年鸦难,在試婚紗的時候發(fā)現(xiàn)自己被綠了根吁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡合蔽,死狀恐怖击敌,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拴事,我是刑警寧澤沃斤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布圣蝎,位于F島的核電站,受9級特大地震影響衡瓶,放射性物質發(fā)生泄漏徘公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一哮针、第九天 我趴在偏房一處隱蔽的房頂上張望关面。 院中可真熱鬧,春花似錦十厢、人聲如沸等太。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩抡。三九已至,卻和暖如春筛武,著一層夾襖步出監(jiān)牢的瞬間缝其,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工徘六, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留内边,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓待锈,卻偏偏與公主長得像漠其,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竿音,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容