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虚拟机不开发系统_理解Java虚拟机体系结构
1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...
- java util logging_Java 日志系列篇一 原生 Java.util.logging
本文网大多网络整理所得,出处太多,不一一列举 简介 Java 中的 Logging API 让 Java 应用可以记录不同级别的信息,它在debug过程中非常有用,如果系统因为各种各样的原因而崩溃,崩 ...
- java 面试题合集_撩课-Java面试题合辑1-50题
1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...
- java怎么提升编程能力_怎样提升java编程能力
1 怎样提升java编程能力 在互联网迅猛发展的时代,而我们如果对互联网一无所知,那就相当于文盲.所以很多人都想去了解它,去学习他.而作为互联网的产物--java,是一门非常不错的技术,学精通之后,你 ...
- java基础代码怎么学_新手入门Java,如何能学好
原标题:新手入门Java,如何能学好 零基础学生只要方法得当,完全可以掌握Java编程.下面总结出来的几点学习Java的方法,仅供大家参考. 01.理解Java思想 Java是一门面向对象编程语言.向 ...
- php和java的区别菜鸟教程_浅谈Java和PHP的主要区别
当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...
- java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class
一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...
- java工程师有什么要求_什么是java,java工程师应该具备哪些能力?
这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...
- java带参数的构造方法_看了Java的Class的源码,我自闭了
作者丨chenweicool 来源:https://www.cnblogs.com/chentang/p/13170081.html 1.class这个类是什么 Class的本质也是一个类,只不过它是 ...
最新文章
- 文件查找命令find的使用
- 设计模式 — Overview
- 铁血规则:事件预订与取消预订[转]
- java 线程状态_Java线程为何没有Running状态?我猜你不知道。
- 故障排查:是什么 导致了客户端批量心跳超时掉线
- 介绍自定义JDataGrid电子表格版本公式中的函数?
- sublime连接Linux进行vim编辑
- EDFbrowser查看edf文件及睡眠分期认识
- 平均曲率、主曲率和高斯曲率
- 2004年 联想员工亲历联想大裁员:公司不是我的家 (网易裁员事件相关文章)
- mapper [pos] of different type, current_type [geo_point], merged_type [ObjectMapper]
- 部署外网网站(二)——宝塔搭建服务器
- 没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!
- 再记公式弱爆了!用ChatGPT处理Excel问题,效率狂升
- 【Hexo】选择更高级的Markdown渲染器
- 【操作系统-哈工大李治军】---学习笔记(下)---操作系统管理内存
- pandas 时间属性函数
- 搞了一上午,下午终于解决了ora-00119和ora-00132(亲测有效,超详细)
- 《Feature Pyramid Networks for Object Detection》论文阅读笔记
- 解决Sonar File won‘t be refreshed because there were errors during analysis
热门文章
- linux编译llvm代码
- 2020-12-16(虚析构函数,神逻辑代码)
- 160个CrackMe002
- 10、MySQL锁等待,死锁,死锁检测
- 第五讲 树状数组与线段树 【未完结】
- 第六章:双指针,BFS,和图论 【完结】
- leetcode:242 : 有效的字母异位词
- 3.1.9 二级页表
- java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext崩溃解决
- HTTPSession对象知识总结