有很多方法能更簡單地建立代理,如果你不需要AOP框架的全部功能(例如不用XML而用Java 5.0的注釋來驅動事務性代理,或者用一段簡單的XML實現對一個Spring工廠里的許多bean應用一致的代理策略)。
還可以不用BeanFactory而用編程方法來構建AOP代理,雖然這種方法很少用:
TestBean target = new TestBean(); DebugInterceptor di = new DebugInterceptor(); MyInterceptor mi = new MyInterceptor(); ProxyFactory factory = new ProxyFactory(target); factory.addInterceptor(0, di); factory.addInterceptor(1, mi); // 一個用來封裝目標的“調用攔截器”被自動添加 ITestBean tb = (ITestBean) factory.getProxy();
我們相信最好把應用程序的裝配從Java代碼里拿出來,AOP也不例外。
使用AOP作為EJB(版本2或以上版本)的替代物來進行企業服務是的重要性正在加大。Spring很成功地展現了這個主張的價值。
MVC web框架
Spring包括一個強大且高度可配置的MVC web框架。
Spring的MVC模型盡管不是源自Struts,但和Struts的很相似。一個Spring的Controller和Struts 的Action很像,它們都是多線程服務對象,只有一個實例代表所有客戶端執行。但是,我們相信Spring MVC比起Struts有一些顯著的優點。例如:
- Spring在控制器、JavaBean模型和視圖間提供清晰的劃分。
- Spring的MVC非常靈活。不像Struts那樣強迫你的Action和Form對象有具體的繼承(你只能用Java 的繼承),Spring的MVC完全基于接口。此外,幾乎Spring MVC框架的每個部分都能通過插入你自己的接口來配置。當然,我們也提供了簡單的類作為一個可選的實現。
- Spring,像WebWork一樣,提供攔截器和控制器,這使得提取處理多個請求的公共行為變得容易了。
- Spring MVC是真正視圖無關的。如果你不愿意你不會被強制使用JSP;你能用Velocity、XLST或其他視圖技術。如果你想用自定義的視圖機制(比如你自己的模板語言),你可以輕松實現Spring的View接口來整合它。
- Spring的Controller 和其他對象一樣是通過IoC來配置的。這讓它們易于測試,和其他Spring管理的對象漂亮地集成在一起。
- 因為沒有強迫使用具體的繼承和顯式地依賴于調度器Servlet的控制器,Spring MVC的web 層比起Struts 的web 層更易于測試。
- Web 層變成了業務對象層上的薄薄一層。這鼓勵了好的習慣。Struts和其他專門的web框架讓你自己實現你的業務對象;Spring為你的應用程序提供了一個完整的框架。
和Struts 1.1 及更高版本一樣,你能根據你的需要在Spring MVC應用程序中擁有多個調度器Servlet。
下面的范例演示了一個簡單的Spring Controller 如何訪問同一個應用程序上下文中定一個業務對象。這個控制器在它的handleRequest()方法中執行了一個Google查詢:
文章來源于領測軟件測試網 http://www.kjueaiud.com/