領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Spring 2.5 背後的核心主題之一是全面的基於註解的配置。我們一直在討論並撰寫大量關於 @Autowired、Spring MVC 的 @RequestMapping 以及對使用 JUnit4 或 TestNG 編寫的註解測試的新支援的部落格。@Autowired 無疑是 Spring 2.5 中最重要的註解,可用於服務元件、Web 元件、單元測試,甚至在使用 Spring 的 @Configurable 結合 AspectJ 織入時的領域物件。Spring MVC 的 @RequestMapping 同樣靈活,支援多種處理程式方法簽名變體。
今天我想把重點放在不同的方面,即 Spring 支援的廣泛的依賴注入註解集。以下列表包含了可在 Spring 2.5 bean 中使用的關鍵註解
這組註解包含了 Java EE 5 的所有通用註解,這意味著您可以在例如 Servlet 2.5 的 servlet、JSF 1.2 的託管 bean 和 Spring 的託管 bean 中使用相同的通用註解。換句話說,如果您有一些使用了註解的標準 JSF 1.2 託管 bean,您可以按原樣將它們的定義從 faces-config 移到 Spring 應用上下文,而無需更改 bean 類!這是一個重要的設計目標:透過簡單地選擇 SpringBeanFacesELResolver 作為您的自定義 JSF ELResolver,Spring 2.5 可以直接替代標準的 JSF 1.2 託管 bean 功能。
在配置方面,您只需在 Spring 應用上下文中使用以下簡單的配置元素即可啟用上述完整的註解集
<context:annotation-config/>
請注意,此設定僅與依賴注入相關,不需要任何引數化。(對於自定義,可以考慮定義 Spring 的獨立 AnnotationBeanPostProcessor,例如 CommonAnnotationBeanPostProcessor)。但是,annotation-config 元素不啟用任何形式的代理或特殊匯出。為此,Spring 提供了更具體的配置元素
<tx:annotation-driven/>
此設定啟用事務註解的處理,Spring 2.5 開箱即用支援以下兩種變體
旁註:與 Spring 的所有支援選項一樣,EJB 3.0 TransactionAttribute 註解僅在 EJB 3.0 API 實際存在於 classpath 中時可用。Spring 會自動適應該 API 的存在,類似於 JSR-250 API 或 JPA API(如上所述)。
<tx:annotation-driven> 元素允許進行事務特定配置,例如要與之通訊的 Spring PlatformTransactionManager(透過“transaction-manager”屬性)以及操作的模式
<tx:annotation-driven transaction-manager="myTm" mode="aspectj"/>
事務註解處理的顯式 AspectJ 模式是 Spring 2.5 中的新功能,允許使用 Spring 的 AnnotationTransactionAspect 代替傳統的 AOP 代理。這需要 AspectJ 編譯時織入或載入時織入,修改恰好使用了 @Transactional 註解的類的位元組碼。這種織入允許支援註解在任何型別的方法上:無論是 public、protected 還是 private,無論是外部呼叫還是物件內部的呼叫,事務都將始終按照註解的指定啟動。這與傳統的 AOP 代理形成鮮明對比,在傳統的 AOP 代理中,註解驅動的事務僅限於透過代理進入的 public 方法呼叫。
如果您的環境支援載入時織入,那麼以下配置足以啟用 AspectJ 風格的事務註解處理。請注意,這需要具有內建織入支援的執行時環境(例如 WebLogic 10、OC4J 10.1.3.1、配置了 Spring 的 TomcatInstrumentableClassLoader 的 Tomcat),或者在 JVM 啟動時指定 Spring 的 VM 代理(“-javaagent:spring-agent.jar”)。
<context:load-time-weaver/><tx:annotation-driven mode="aspectj"/>
<bean id="transactionManager" class="..."/>
最後,Spring 2.5 還提供了一個方便的配置元素用於啟用 JMX 匯出。在所有常見平臺上,包括標準的 Java 5 平臺 MBeanServer 以及 WebLogic 9/10 和 WebSphere 6 暴露的特殊 MBeanServer,預設的 MBeanServer 都將自動檢測到。
<context:mbean-export/>
Spring 管理的 bean 可以實現標準的 MBean/MXBean 約定,符合 JMX 規範的 MBean 類,或者使用以下註解宣告其管理簽名(自 Spring 1.2 起已知)
這體現了 Spring 註解配置模型的真正強大之處:不同的配置關注點無縫地融合成一個統一的整體,具有一致的配置風格和統一的元件生命週期——歸根結底,它仍然是一個由 Spring ApplicationContext 管理的標準 Spring bean!
關於 Spring 核心配置註解的簡要介紹到此為止。如果您有興趣瞭解更多關於 Spring 2.5 的新功能以及它們如何協同工作,我邀請您參加本週三的Spring 2.5 網路研討會,我將在其中涵蓋 Spring 2.5 的所有關鍵功能領域,從 Java 6 支援到基於註解的配置!