2013-01-20 51 views

回答

0

使用ApplicationContextAware您可以獲得當前上下文的引用,以便您可以對其進行編輯,例如添加或刪除bean。通常這是一個壞主意,除了在某些測試場景中。

Spring還強調,與ApplicationContextAware相比,使用setter的簡單POJO更依賴於Spring框架。

+0

因爲我們需要很多實用bean,我們需要哪一種實用bean。您可以選擇哪一種實用bean。通過編寫大量setter/getters來避免類複雜 – cooper

+0

如果您需要很多實用bean,您應該考慮bean是否具有正確的角色如果它做了太多的事情/負有太多的責任),或者是你的實用bean被分離到良好的邏輯組中。這樣你應該能夠減少不必要的依賴。我可以想到在任何生產bean中「ApplicationContextAware」的任何理由。 – vertti

0

除非您確實需要,否則不應使用ApplicationContextAware。如果您可以使用setter/field/constructor injection來支持您的所有業務需求,請不要使用ApplicationContextAware

有些人可能會試圖使用ApplicationContextAware來獲取原型scoped bean的新實例(實際上BeanFactoryAware已經足夠)。但有更好的工具,即lookup-method

0

這是兩種不同的模式。當您使用ApplicationContextAware時,您實現了Service Locator模式,但setter注入是指一種依賴注入模式。後者在開發低耦合應用時更爲可取。

這兩種模式之間的差異描述herehere

0

在大多數scenaios,setter注入是完全以足夠的,它提供了一個更好的解決方案,幫助您保持實例之間的關係。因爲這些類不直接依賴容器,也就是說,它們是Pojos,不需要知道容器的存在,這會爲單元測試和將來的移植帶來很多便利。

如果您確實需要從容器中取出某些東西,例如對某些類型的bean進行某種增強,那麼是時候使用ApplicationContextAware了。通常,不建議通過實現ApplicationContextAware手動獲取類的依賴關係,特別是對於業務對象。他們不應該爲自己的組裝負責'。