一路走来,遇到好些后生来问我: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思想相关推荐

  1. 为啥JAVA虚拟机不开发系统_理解Java虚拟机体系结构

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  2. java util logging_Java 日志系列篇一 原生 Java.util.logging

    本文网大多网络整理所得,出处太多,不一一列举 简介 Java 中的 Logging API 让 Java 应用可以记录不同级别的信息,它在debug过程中非常有用,如果系统因为各种各样的原因而崩溃,崩 ...

  3. java 面试题合集_撩课-Java面试题合辑1-50题

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  4. java怎么提升编程能力_怎样提升java编程能力

    1 怎样提升java编程能力 在互联网迅猛发展的时代,而我们如果对互联网一无所知,那就相当于文盲.所以很多人都想去了解它,去学习他.而作为互联网的产物--java,是一门非常不错的技术,学精通之后,你 ...

  5. java基础代码怎么学_新手入门Java,如何能学好

    原标题:新手入门Java,如何能学好 零基础学生只要方法得当,完全可以掌握Java编程.下面总结出来的几点学习Java的方法,仅供大家参考. 01.理解Java思想 Java是一门面向对象编程语言.向 ...

  6. php和java的区别菜鸟教程_浅谈Java和PHP的主要区别

    当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...

  7. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

  8. java工程师有什么要求_什么是java,java工程师应该具备哪些能力?

    这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...

  9. java带参数的构造方法_看了Java的Class的源码,我自闭了

    作者丨chenweicool 来源:https://www.cnblogs.com/chentang/p/13170081.html 1.class这个类是什么 Class的本质也是一个类,只不过它是 ...

最新文章

  1. 文件查找命令find的使用
  2. 设计模式 — Overview
  3. 铁血规则:事件预订与取消预订[转]
  4. java 线程状态_Java线程为何没有Running状态?我猜你不知道。
  5. 故障排查:是什么 导致了客户端批量心跳超时掉线
  6. 介绍自定义JDataGrid电子表格版本公式中的函数?
  7. sublime连接Linux进行vim编辑
  8. EDFbrowser查看edf文件及睡眠分期认识
  9. 平均曲率、主曲率和高斯曲率
  10. 2004年 联想员工亲历联想大裁员:公司不是我的家 (网易裁员事件相关文章)
  11. mapper [pos] of different type, current_type [geo_point], merged_type [ObjectMapper]
  12. 部署外网网站(二)——宝塔搭建服务器
  13. 没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!
  14. 再记公式弱爆了!用ChatGPT处理Excel问题,效率狂升
  15. 【Hexo】选择更高级的Markdown渲染器
  16. 【操作系统-哈工大李治军】---学习笔记(下)---操作系统管理内存
  17. pandas 时间属性函数
  18. 搞了一上午,下午终于解决了ora-00119和ora-00132(亲测有效,超详细)
  19. 《Feature Pyramid Networks for Object Detection》论文阅读笔记
  20. 解决Sonar File won‘t be refreshed because there were errors during analysis

热门文章

  1. linux编译llvm代码
  2. 2020-12-16(虚析构函数,神逻辑代码)
  3. 160个CrackMe002
  4. 10、MySQL锁等待,死锁,死锁检测
  5. 第五讲 树状数组与线段树 【未完结】
  6. 第六章:双指针,BFS,和图论 【完结】
  7. leetcode:242 : 有效的字母异位词
  8. 3.1.9 二级页表
  9. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext崩溃解决
  10. HTTPSession对象知识总结