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