2012-11-16 55 views
1

請原諒這個Spring初學者問題。我正在閱讀第一版的第4章並將其引入回調方法和Bean後處理器。Spring框架中的回調方法和Bean後處理器之間的區別

現在我只是對這兩者感到困惑,似乎他們都做了某事。當bean實例被創建時,我如何區分這兩個?也許一個例子會很好?

我個人的理解是,如果我們必須找到一個區別,那麼當bean被創建時,會啓動回調方法,Bean創建後稍微調用Bean後處理器?另外,我認爲區別也可能是初始化回調方法只關注一個bean,而Beanpost procsso會一個接一個地遍歷所有的bean實例?

另外,有沒有人可以幫助我進一步解釋JSR250註釋@PreDestroy和@PostConstruct與上述兩個概念的差異?

非常感謝您的幫助!

+0

在春天有一些視頻由Koushik ..你可以看他們..他給了一些豐富的信息。 – user533

回答

4

我已經使用了其中的一種,但我認爲你所指的回調方法和@PostConstruct方法是一樣的。但要回答你的問題,區別......

1)@PostConstruct(或afterPropertiesSet)方法是在實例化bean後調用的特定類的內部方法。這真的是你把類型特定的行爲。

2)BeanPostProcessor將觸及所有Spring bean。因此,您可以在這裏放置交叉功能,而不一定是針對具體的類。

一個小例子...說我有一個小地址簿應用程序,用於跟蹤我的朋友和他們的地址。如果我有一些瘋狂的bug,我不能追蹤到,我可能會使用BeanPostProcessor將所有Spring Bean與一些日誌記錄一起打包,比如「現在調用Address.getStreet()...,現在調用Address.getCity()。 ..「。

現在我可以在Address中使用@PostConstruct方法來驗證並查找某些Web服務的郵政編碼,以查找只有城市/州的地址。

現在,我可能實際上並沒有一個域對象觸及Web服務,但這個想法是說明@PostConstruct可以處理類特定的東西,BeanPostProcessor可以處理跨多個類的事情。

另外值得注意的是,BeanPostProcessor有兩個重寫方法:postProcessBeforeInitialization和postProcessAfterInitialization,它可以讓你決定在bean的@PostConstruct方法之前和之後運行什麼。

+0

謝謝你提到的地址是一個bean嗎? – Kevin

+0

另外,這些在實際開發中很少使用? – Kevin

+0

很高興幫助,在這個例子中Address是一個spring bean--在實踐中我沒有使用太多,通常我把大部分初始化放在默認構造函數中。但是我認爲如果你有一些應用程序廣泛的關注,比如廣義日誌記錄,BeanPostProcessor可能是一個很棒的工具。但是,不,我還沒有使用它。 – jeff

0

bean後處理器接口有兩個回調方法:1. PostProcessBeforeInitializationPostProcessAfterInitializationPostProcessBeforeInitialization方法在調用bean的init-method或afterPropertySet方法之前被調用。

PostProcessAfterInitialization方法只是在bean初始化完成後調用。

Bean Post Process給出了在bean初始化之前和之後執行某些操作的機會。

相關問題