理解原生JAVA AOP思想
2020-12-13 04:15
标签:stack 返回值 阅读 tcl 行业应用 system 检测 time etc 一路走来,遇到好些后生来问我:AOP该如何理解?我一开始是丢个度娘给他们的。但是现在回头想想,培养新人不能这么草率,丢个度娘给他们,让他们花了大量的时间去阅读无用的文章外,一不小心还走火入魔了。所以现在我正儿八经的写了个手稿,以便做以后的相关问题回答。文章有些瑕疵,请咬文嚼字的大牛们忽略,本文目的在于解释AOP到底有个锤子用。 上安利。。。说错,是案例:在一个夜黑风高的晚上,张三胖突然接到张大胖的电话,说咱们的视频网站响应延时太长了。你想办法监测一下是哪里的代码导致延时巨大~~~。 张三胖打开代码,关键代码主要在张五胖写的Video类里面: 调用方: 张三胖不想去修改张五胖的代码。所以张三胖就考虑在每个方法执行前后增加时间计算。如果类里面的方法不多,这样是可以的。但是如果Video有上百个方法,那怎么搞?这时候AOP就来搞事情了。 原调用方修改为: 这样就能检测到每个方法的消耗的时间了。 这只是一个小例子,其实AOP能做的不仅仅是这些。如: 理解原生JAVA AOP思想 标签:stack 返回值 阅读 tcl 行业应用 system 检测 time etc 原文地址:https://www.cnblogs.com/liu-q/p/11106247.htmlpublic interface IVideo {
List get();
Object getInfo();
}
public class JapanVideo implements IVideo {
@Override
public List get() {
try {
Thread.sleep(1024);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("一大堆正规的小视频列表~~~~~");
return null;
}
@Override
public Object getInfo() {
try {
Thread.sleep(3221);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("导演:XXX;主演:苍老师~~~~~");
return null;
}
}
IVideo video = new JapanVideo();
video.get();
video.getInfo();
public class AOPHandle implements InvocationHandler {
private Object obj;
public AOPHandle(Object obj){
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//方法返回值
System.out.println("开始执行:"+System.currentTimeMillis());
//反射调用方法
Object ret=method.invoke(obj, args);
//声明结束
System.out.println("开始完毕:"+System.currentTimeMillis());
//返回反射调用方法的返回值
return ret;
}
}
AOPHandle aopHandle = new AOPHandle(new JapanVideo());
IVideo video = (IVideo) Proxy.newProxyInstance(
JapanVideo.class.getClassLoader(),
new Class[] { IVideo.class },
aopHandle);
video.get();
System.out.println("\n");
video.getInfo();
上一篇:SpringBoot:初探 RabbitMQ 消息队列
下一篇:构造数据类型—数组