做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子
怎么使用eclise 抽取方法,请看 利用eclipse 抽取代码片段为方法
抽取完成之后,还需要
① 将Collection.class换成 target.getClass(),target是Object的,可以来代理所有的对象
② Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHander(){
invoke(Object proxy,Method method,Object[] args) {
advice.beforeMethod(method);//我们在使用Spring AOP时,只写 beforeMethod类似的交叉功能的实现
Object retVal= proxy.invoke(target,args);
advice.afterMethod(method);//我们在使用Spring AOP时,只写 afterMethod 类似的交叉功能方法的实现
return retVal;
}
}
)
我通过eclipse封装好的黑匣子
private static Object getProxy(final Object target,final Advice advice) {Object proxy3=(Collection)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {/* long beginTime=System.currentTimeMillis();Object retVal=method.invoke(target, args);long endTime=System.currentTimeMillis();System.out.println(method.getName()+"执行时间 "+(endTime-beginTime)+" 毫秒");return retVal;*/advice.beforeMethod(method);Object retVal=method.invoke(target, args);advice.afterMethod(method);return retVal;}});return proxy3;}
这么调用黑匣子
final ArrayList target=new ArrayList();//类变量Collection proxy3 = (Collection) getProxy(target,new MyAdvice());
我写的MyAdvice,其中Advice将来由Spring定义好,里面会有各种位置的方法,如afterMethod,beforeMethod, after throwing , around
package com.itcast.day3;import java.lang.reflect.Method;public class MyAdvice implements Advice {long beginTime=0;@Overridepublic void beforeMethod(Method method) {System.out.println("到传智播客学习啦...");beginTime=System.currentTimeMillis();}@Overridepublic void afterMethod(Method method) {System.out.println("从传智播客毕业工作啦...");long endTime=System.currentTimeMillis();System.out.println(method.getName()+"执行时间 "+(endTime-beginTime)+" 毫秒");}}
将来使用Spring AOP时,只做两件事,
① 确定目标对象target
② 写MyAdvice (其实就是实现Spring 提供的Advice接口中的 beforeMethod, afterMethod方法)
开始做,坚持做,重复做
做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子相关推荐
- aop的四种增强以及JDK动态代理、Cglib动态代理
动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...
- 学习Spring必学的Java基础知识(2)----动态代理
Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...
- Spring 面向切面编程 第3关:AOP实现原理-JDK动态代理
目录 任务描述 相关知识 代理模式(Proxy) AOP实现的两种方式 JDK动态代理步骤 案例模拟AOP实现 代理类说明 编程要求 测试说明 参考代码 任务描述 我们知道,Spring AOP的主要 ...
- spring中aop默认使用jdk动态代理,springboot2以后默认使用cglib来实现动态代理详解
Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里: 真的假的?查阅文档 刚看到这个说法的时候,我是保持怀疑态度的. 大家都知道 Spring5 之前的版本 AOP ...
- AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理
AOP.ASPECT.Spring AOP.JDK动态代理.CGLib动态代理 1 AOP介绍 1.1 基本定义 AOP(Aspect Oriented Programming)称为面向切面编程,它是 ...
- Spring 初识Aop JDK动态代理实现 原理初显
Spring 初识Aop JDK动态代理实现 原理初显 一.项目结构 二.具体步骤: 1.创建maven项目 创建好包结构 2.写一个TestDao接口 及实现类 3. 写一个自己的切面类 4.jav ...
- Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题
Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题 参考文章: (1)Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代 ...
- 【spring】初识aop(面向切面编程) 使用jdk动态代理
BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...
- Spring AOP基础—JDK动态代理
JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler动态创建一个符合某一接口的实例,生成目标类 ...
最新文章
- C#模糊查询绑定datagridview
- 如何从文件的完整路径获取目录?
- Linux操作命令(四)
- 将ALV GRID中改变的值更新到ALV内表中
- m3u8链接地址_FFmpeg下载m3u8视频
- 两台linux服务器负载均衡代码实现,nginx实现负载均衡,nginx负载均衡确保两台服务器数据保...
- 【BZOJ4254】Aerial Tramway 树形DP
- android adb工具linux,Ubuntu Android ADB 使用
- 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
- php 远程函数,php 远程图片保存到本地的函数类
- vue源码学习:Object.defineProperty 对数组监听
- java httpclient 进度条_java – 如何使用Apache HttpClient 4获取文件上传的进度条?
- 出现java.lang.NoSuchMethodError错误的原因
- 小白安装linux系统一键,小白如何快速安装vos3000,一键快速安装VOS
- 生活大爆炸第三季 那些精妙的台词翻译
- WinForm 去掉DataGridView最后一行的空白行,删除空白行
- 现代薄膜温室大棚五大优点,常用的经济作物都有哪些?
- 前端 2018 届校招笔试面经【百度,阿里,腾讯,阿里文娱,携程,美团,拼多多】...
- 微信小程序上传文件到阿里OSS教程
- 图虫:科技赋能图片版权领域创新发展