項目中使用SPRING AOP方式統一捕獲異常


最近和領導說不想做Java開發(本來公司屬我代碼編寫速度快,領導不肯放手),於是讓我將現有的框架清理一下,搭建一個通用框架讓開發人員方便使用,以下是主要優化方式:
1.
異常統一捕獲:
傳統程序中我們都是使用try{}catch(Exception e){ //輸出異常信息}來捕獲異常,這樣做的缺點是:對於不確定異常未捕獲,如對於一段業務程序,開發者知道沒有錯誤,但對於編譯器來說可能就會出錯,如內存不足等之類的不肯定錯誤。現在我們可以通過 SPRINGAOP切入機制來動態捕獲,主要配置如下:
注意:由於Struts2SPRING使用的動態代理機制不同,不能切入到Aciton中,故配置advice參數時不能切入到Action的方法中去

<!--
設置SPRING AOP動態捕獲異常 1設定爲自動代理 2負責記錄有異常發生時的信息 3 對指定類的任何方法有效 -->
<!-- -->
<bean id="autoProxyCreator"

class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
<bean id="exceptionHandler"
class="com.datadriver.common.util.exception.aop.AopExceptionHandler" />
<!-- 這裏配置切入點,可以爲正則表達式 .*DAOImpl\.delete.* -->
<bean id="exceptionHandlereAdvisor"

class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="exceptionHandler" />
</property>
<property name="patterns">
<list>
<!-- 切入包名中含impl字符的類主要爲了捕獲實現接口的類 -->
<value>.*impl*.*</value>

</list>
</property>
</bean>


其中類AopExceptionHandler

/**
* @author: zhengjianbo/Ram

* @Email: [email protected]
* @Company: DataDriver©2010/www.datadriver.com.cn
* @Action: 負責異常處理的Advice 使用Throw通知類型來實現Advice
* @DATE: 2010-9-3-
上午12:09:10
*/
public class AopExceptionHandler implements ThrowsAdvice

{
/**
* 重寫afterThrowing()方法
*

* @param method 執行方法
* @param args
執行參數
* @param target
執行實體
* @param subclass
父類
* @throws Throwable
異常
*/
public void afterThrowing(Method method, Object[] args
, Object target,
Throwable subclass) throws Throwable
{

DataDriverLog.log.info("\r\n>>>>>\r\n執行:"+method.getName()+"時發生異常:"
+subclass+"\r\n<<<<<");//
輸出異常信息
}

}


在具體使用時要注意:必須使用try{}catch(Exception e){} 對業務代碼進行處理,如添加一條記錄發生錯誤:
try{
//
添加記錄成功的代碼處理
}catch(Exception e){
//
添加記錄失敗的代碼處理,
//
類似 alert("添加失敗"); 的效果
}
而異常信息則通過afterThrowing方法輸出來,無需再在catch當中System.out.println出來,具體可以自己測試一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章