怎么使用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动态代理成为一个黑盒子相关推荐

  1. aop的四种增强以及JDK动态代理、Cglib动态代理

    动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...

  2. 学习Spring必学的Java基础知识(2)----动态代理

    Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...

  3. Spring 面向切面编程 第3关:AOP实现原理-JDK动态代理

    目录 任务描述 相关知识 代理模式(Proxy) AOP实现的两种方式 JDK动态代理步骤 案例模拟AOP实现 代理类说明 编程要求 测试说明 参考代码 任务描述 我们知道,Spring AOP的主要 ...

  4. spring中aop默认使用jdk动态代理,springboot2以后默认使用cglib来实现动态代理详解

    Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里: 真的假的?查阅文档 刚看到这个说法的时候,我是保持怀疑态度的. 大家都知道 Spring5 之前的版本 AOP ...

  5. AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理

    AOP.ASPECT.Spring AOP.JDK动态代理.CGLib动态代理 1 AOP介绍 1.1 基本定义 AOP(Aspect Oriented Programming)称为面向切面编程,它是 ...

  6. Spring 初识Aop JDK动态代理实现 原理初显

    Spring 初识Aop JDK动态代理实现 原理初显 一.项目结构 二.具体步骤: 1.创建maven项目 创建好包结构 2.写一个TestDao接口 及实现类 3. 写一个自己的切面类 4.jav ...

  7. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题 参考文章: (1)Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代 ...

  8. 【spring】初识aop(面向切面编程) 使用jdk动态代理

    BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...

  9. Spring AOP基础—JDK动态代理

    JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler动态创建一个符合某一接口的实例,生成目标类 ...

最新文章

  1. C#模糊查询绑定datagridview
  2. 如何从文件的完整路径获取目录?
  3. Linux操作命令(四)
  4. 将ALV GRID中改变的值更新到ALV内表中
  5. m3u8链接地址_FFmpeg下载m3u8视频
  6. 两台linux服务器负载均衡代码实现,nginx实现负载均衡,nginx负载均衡确保两台服务器数据保...
  7. 【BZOJ4254】Aerial Tramway 树形DP
  8. android adb工具linux,Ubuntu Android ADB 使用
  9. 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
  10. php 远程函数,php 远程图片保存到本地的函数类
  11. vue源码学习:Object.defineProperty 对数组监听
  12. java httpclient 进度条_java – 如何使用Apache HttpClient 4获取文件上传的进度条?
  13. 出现java.lang.NoSuchMethodError错误的原因
  14. 小白安装linux系统一键,小白如何快速安装vos3000,一键快速安装VOS
  15. 生活大爆炸第三季 那些精妙的台词翻译
  16. WinForm 去掉DataGridView最后一行的空白行,删除空白行
  17. 现代薄膜温室大棚五大优点,常用的经济作物都有哪些?
  18. 前端 2018 届校招笔试面经【百度,阿里,腾讯,阿里文娱,携程,美团,拼多多】...
  19. 微信小程序上传文件到阿里OSS教程
  20. 图虫:科技赋能图片版权领域创新发展

热门文章

  1. 初步了解win32界面库DuiLib
  2. 初步了解BIM模型和超图相关操作
  3. web前端常识之浏览器原理
  4. TensorFlow-Bitcoin-Robot:Tensorflow 比特币交易机器人
  5. HDU-1274 展开字符串
  6. BZOJ 1042 [HAOI2008]硬币购物
  7. 解決BufferedReader读取UTF-8文件中文乱码(转)
  8. 研发部 架构师 定义解读
  9. Java指派问题_指派问题的匈牙利算法
  10. python 服务端渲染_客户端渲染和服务器渲染的区别