2011-12-28 56 views
2

在大多數情況下,只有服務類是由春季管理和單身。在某些情況下,域代碼需要注入,除非它由Spring管理,否則它將無法工作。話雖這麼說,這是最好的和非性能密集型擁有所有域類作爲@Bean與範圍爲原型,隨時隨地你想要做春天是明智的做法,使所有域類原型

Person p = new Person(); 

只是做

Person p = ctx.getBean("person"); 

任何幫助的優點和缺點將不勝感激。

+0

你問問哪一個更好?問題有點不清楚。 –

+0

*在某些情況下,域代碼需要注入*。如果我是你,我會試圖擺脫這些情況。 –

+0

我想知道是否可以創建所有域類的原型bean – user373201

回答

0

獲取原型bean的開銷顯然比直接通過new關鍵字(Spring IoC容器執行的任何依賴注入,生命週期回調等)直接實例化的成本更高。雖然對於單個實例可能並不重要,但如果您在循環中執行此操作,則可能會看到性能問題。但是,如果您需要任何singleton bean(通常是服務)或資源(如DataSource),那麼您將更喜歡使用prototype bean。任何其他依賴關係將自動接入。

除了性能考慮,您的選擇也可能取決於您的設計。如果你遵循一個具有服務層和數據訪問對象的「傳統」體系結構,而這些對象存在於域對象中,那麼從Spring的角度來看,一切都是無狀態的。您的服務和數據訪問對象是使用POJO的域對象的單身人士。在這裏你很少需要一個原型bean。

如果另一方面你遵循一個更加面向對象的方法,其中一個對象有一個無狀態的工廠(允許實例被獲取或創建),然後該對象能夠自己堅持下來(比如說'保存'方法),那麼幾乎所有的域對象都可能是原型bean。

在幾乎所有的決定中,都會存在取捨,沒有一個正確的答案。

相關問題