你能定義聲明式的回滾規則。應用程序開發者常想要事務能夠在遇到任何異常時回滾,但EJB在遇到未捕獲的應用程序異常時不會自動回滾(僅僅在未檢查的異常和其他Throwable異常還有“系統”異常時才回滾)。Spring的事務管理允許你聲明式地指定哪個異常和子類是應該引起自動回滾的。默認的行為和EJB一樣,但你可以指定經檢查異常和未經檢查異常一樣回滾。這在最小化可編程回滾需要上有很大好處,而這可編程回滾也建立了對Spring事務API的依賴(就像EJB可編程回滾建立對EJBContext的依賴一樣)。
底層Spring事務抽象支持保存點(如果底層事務基本結構支持的話),所以Spring的聲明性事務管理能支持嵌套事務,和EJB CMT特有的傳播模式(Spring支持和EJB一樣的語義)。因而,舉例來說,如果你在Oracle上執行JDBC操作,你能通過Spring使用聲明性嵌套事務。
事務管理沒有綁定JTA。正如前面解釋的,Spring事務管理能和不同事務策略合作。你還可以使用Spring AOP實現應用程序特有方面。是否要這樣做取決于你對AOP概念的理解程度,而不是Spring的能力,但這會是很有用的。我們見到的成功例子包括:
在安全檢查要求的復雜度超過了標準J2EE 安全基礎結構的地方自定義安全攔截器。(當然,在開始你自己的安全結構前,你應該看看Acegi Security for Spring,一個強大、靈活的用AOP和Spring整合的安全框架,這也反映了Spring架構上的方法。)
在開發中使用調式和記錄方面。
實現在一個地方使用一致的異常處理策略的方面。
發送郵件給管理員或用戶,警告不正常情況的攔截器。
應用程序特有方面能成為消除許多方法對樣板代碼需要的有效途徑。
Spring AOP透明地與Spring BeanFactory概念集成。代碼從一個Spring的BeanFactory中獲得一個對象的時候不用知道它是不是被攔截。和任何對象一樣,契約是在對象實現的接口上定義的。
下面的XML片斷描述了如何定義一個AOP代理:
<bean id="myTest" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>org.springframework.beans.ITestBean</value> </property> <property name="interceptorNames"> <list> <value>txInterceptor</value> <value>target</value> </list> </property>
</bean>
注意,盡管引用的或BeanFactory的getBean()方法返回的bean類型依賴于代理接口,bean定義里的類總是AOP框架的ProxyFactoryBean。(支持多代理方法。) ProxyFactoryBean的“interceptorNames”屬性接受一個String列表。(必須用bean名稱而不是bean引用,因為如果代理是一個原型那么新的有狀態攔截器需要被創建。)列表里的名字可以是攔截器或者切入點(攔截器和何時該被應用的信息)。上面列表里的“target”值自動建立一個“調用攔截器”封裝目標對象。它是工廠里的一個實現了代理接口的bean的名稱。例子里的myTestbean能像工廠里的其他bean那樣被使用。例如其他對象可以通過<ref>元素引用它,并且這些引用可以用Spring IoC設置。
文章來源于領測軟件測試網 http://www.kjueaiud.com/