概述
使用衝突Spring註解與我的設計指導
- 春3.0.1(註釋配置)
- 當前配置使用CGLIB作爲代理的創造者,但是這不是我的偏好
- 交易註釋配置沒有任何特殊設置
- 所有配置都使用註釋完成(
@Service
,@Transactional
,@ManagedResource
,@Inject
等)
- 的Hibernate 3.5(實體與javax.persistence註釋)
準則凸顯
- 每豆與
@Repository
或@Service
必須的註解有一個接口 - 構造器DI(當不需要重新配置時)
- 構造具有默認能見度(
Foo(Bar bar) {...}
)
- 構造具有默認能見度(
- 豆字段最終(不需要重新配置時)
- 沒有導致默認構造函數
- 實施方案爲默認可見最終修飾符(
final class Foo
)
的問題
- CGLIB不能代理final類
- CGLIB需要默認的空構造
- 需要一些服務通過JMX暴露
- MBean出口商不能工作,除非由CGLib代理
- 一些
@Transactional
@Service
s是通過門面服務訪問的,這需要一個以上的服務包含在門面事務中(例如,觀察家服務超過2應用程序組件) - 某些接口有一個以上的實施(目前由
@Qualifier
區別) - 未來的指導方針(或不錯的功能) - 每個應用程序模塊將有
beanRefContext.xml
文件來配置它的內部應用程序上下文
當我過去使用XML配置工作時,我能夠強制執行上面提到的所有準則,但切換到註釋時看起來像Spring是行爲不當的。
我的組中的開發人員更喜歡註釋配置(我似乎更容易連線和編寫新代碼),但我注意到他們向代碼中引入了各種「黑客」,以防止處理Spring應用程序上下文故障。
的問題(一個或多個)
- 是否有使用註釋配置時,我應該遵循最佳實踐?
- 當使用每個接口多於一個實現(試圖減少使用
@Primary
或@Qualifier
)當使用@ManagedResource
- 當使用上述
的組合
- 當使用每個接口多於一個實現(試圖減少使用
- 當使用
@Transactional
- 有沒有辦法停止使用CGLib,保持註釋配置,仍然能夠導出我的MBeans註釋?
- 保留大部分(最好是全部)我的指導方針的適當實施是什麼?
恕我直言,這些指導方針很奇怪。爲什麼不嘗試遵守Java Beans規範?而且無論如何,如果他們只是指導方針,我想你可以忽略那些如果結束是合理的,那麼中間的那些。 – gpeche 2010-11-30 19:30:48
我不會稱他們爲陌生人,他們是從有效的Java編程指南繼承而來的。這些不是Java bean,而是Spring beans。另外,使用XML時,遵循這些準則並沒有問題,所以恕我直言註釋是不合理的。 – Bivas 2010-11-30 19:40:38