java 事务处理 是不是aop思想_理解原生JAVA AOP思想
一路走來,遇到好些后生來問我:AOP該如何理解?我一開始是丟個度娘給他們的。但是現在回頭想想,培養新人不能這么草率,丟個度娘給他們,讓他們花了大量的時間去閱讀無用的文章外,一不小心還走火入魔了。所以現在我正兒八經的寫了個手稿,以便做以后的相關問題回答。文章有些瑕疵,請咬文嚼字的大牛們忽略,本文目的在于解釋AOP到底有個錘子用。
上安利。。。說錯,是案例:在一個夜黑風高的晚上,張三胖突然接到張大胖的電話,說咱們的視頻網站響應延時太長了。你想辦法監測一下是哪里的代碼導致延時巨大~~~。
張三胖打開代碼,關鍵代碼主要在張五胖寫的Video類里面:
public interfaceIVideo {
List get();
Object getInfo();
}
public class JapanVideo implementsIVideo {
@OverridepublicList get() {try{
Thread.sleep(1024);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("一大堆正規的小視頻列表~~~~~");return null;
}
@OverridepublicObject getInfo() {try{
Thread.sleep(3221);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("導演:XXX;主演:蒼老師~~~~~");return null;
}
}
調用方:
IVideo video = newJapanVideo();
video.get();
video.getInfo();
張三胖不想去修改張五胖的代碼。所以張三胖就考慮在每個方法執行前后增加時間計算。如果類里面的方法不多,這樣是可以的。但是如果Video有上百個方法,那怎么搞?這時候AOP就來搞事情了。
public class AOPHandle implementsInvocationHandler {privateObject obj;publicAOPHandle(Object obj){this.obj =obj;
}
@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throwsThrowable {//方法返回值
System.out.println("開始執行:"+System.currentTimeMillis());//反射調用方法
Object ret=method.invoke(obj, args);//聲明結束
System.out.println("開始完畢:"+System.currentTimeMillis());//返回反射調用方法的返回值
returnret;
}
}
原調用方修改為:
AOPHandle aopHandle = new AOPHandle(newJapanVideo());
IVideo video=(IVideo) Proxy.newProxyInstance(
JapanVideo.class.getClassLoader(),new Class[] { IVideo.class},
aopHandle);
video.get();
System.out.println("\n");
video.getInfo();
這樣就能檢測到每個方法的消耗的時間了。
這只是一個小例子,其實AOP能做的不僅僅是這些。如:
日志記錄,跟蹤,優化和監控
事務的處理
系統統一的認證、權限管理等
應用系統的異常捕捉及處理
針對具體行業應用的橫切行為
總結
以上是生活随笔為你收集整理的java 事务处理 是不是aop思想_理解原生JAVA AOP思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现gbk utf8 转换_ja
- 下一篇: java 转xml 变成两根下划线_XS