2019独角兽企业重金招聘Python工程师标准>>>

一、概述

传入目标对象和Advice(要执行的内容)对“通过反射创建动态代理对象(二)”进行改造(AOP框架实现原理),建立更加通用的代理对象。

二、代码说明

1、Proxy2IntegrationReform.java

package staticimport.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;import staticimport.proxy.advice.Advice;
import staticimport.proxy.advice.MyAdvice;/**** * 传入目标对象和Advice(要执行的内容)(AOP框架实现原理)* * @author Liu**/
public class Proxy2IntegrationReform {public static void main(String[] args) {Collection<String> target = new ArrayList<>();Collection proxy = (Collection) getProxy(target,new MyAdvice());proxy.add("a");proxy.add("b");proxy.add("c");//     proxy.clear();System.out.println(proxy.size());}private static Object getProxy(final Object target,final Advice advice) {Object object = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {advice.beforeAdvice(method);Object object = method.invoke(target, args);advice.afterAdvice(method);return object;}});return object;}}

2、接口Advice.java

package staticimport.proxy.advice;import java.lang.reflect.Method;public interface Advice {void beforeAdvice(Method method);void afterAdvice(Method method);
}

3、MyAdvice.java

package staticimport.proxy.advice;import java.lang.reflect.Method;public class MyAdvice implements Advice {private long startTime;@Overridepublic void beforeAdvice(Method method) {startTime = System.currentTimeMillis();}@Overridepublic void afterAdvice(Method method) {long endTime = System.currentTimeMillis();System.out.println(method.getName() + " of time consume: " + (endTime - startTime) + " ms");}}

转载于:https://my.oschina.net/Howard2016/blog/1617990

通过反射创建动态代理对象(三)相关推荐

  1. 通过反射创建动态代理对象(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...

  2. java类加载机制、反射、动态代理详解

    类的加载.连接和初始化(系统可能在第一次使用某个类时加载该类, 也可能采用预加载机制来加载某个类)动态代理实现 1.JVM和类 当调用 java 命令运行某个 Java 程序时, 该命令将会启动一个 ...

  3. Spring 从入门到精通 (十六) AOP底层如何创建动态代理类

    关键词:Spring | AOP | 创建代理类 | 底层 本专栏通过理论和实践相结合,系统学习框架核心思想及简单原理,原创不易,如果觉得文章对你有帮助,点赞收藏支持博主 ✨ 目录 一.创建对象三要素 ...

  4. hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看

    延续之前的MonkeyLei:Android-模块化.组件化.插件化.热修复-插件化-起个头,我们复习下里面的关于反射和动态代理点的知识.然后尝试简单了解下Hook... 看之前文章,记得多复习下反射 ...

  5. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )

    文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  6. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

  7. 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )

    文章目录 前言 一.静态代理的弊端 二.动态代理的优势 三.动态代理使用流程 1.目标对象接口 2.被代理对象 3.调用处理程序 4.客户端 四.动态生成 代理对象 类 的 字节码 文件数据 前言 代 ...

  8. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  9. throwable四参构造_深入分析Java反射(四)-动态代理

    动态代理的简介 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分 ...

最新文章

  1. 云从完成超过18亿元新一轮融资,加快上市步伐
  2. linux下vi命令大全[转]
  3. 保定linux第一版PPT-SVN for Linux
  4. gorm物理删除:unscoped用法
  5. Debian Gnu/Linux 9关闭 111端口
  6. 操作系统上机题目(多线程2)
  7. 【CF#706B】 Interesting drink (二分)
  8. Caret模型训练和调参更多参数解读(2)
  9. 安装ISE.14.7后仿真时遇到的问题与解决
  10. 基于c语言中调试工具的用法汇总(不包含gdb)【转】
  11. python文本聚类dbscan_文本挖掘之文本聚类(DBSCAN)
  12. CREO学习笔记【钣金结构中常用的标准件】
  13. 基于阿里云产品和开源Hudi结合
  14. python自动批量发邮件脚本_python自动发送邮件脚本
  15. 记一次跟突破360主机卫士上传
  16. 联想小新安装windows 7
  17. 猿创征文|国产数据库[StarRocks]实战学习
  18. 几个简单的数据点平滑处理算法
  19. zookeeper读取配置文件失败
  20. Android模仿手机京东商城实训小项目(含源码)

热门文章

  1. Lucene 简单手记
  2. iPhone磁盘空间/剩余空间代码
  3. 参数修饰符ref,out ,params的区别
  4. 三丰三坐标编程基本步骤_数控车床编程,经典实例教程
  5. 年度总结 | 2020CSDN的第一桶金
  6. 什么是“小小输入法”软件? 用其进行郑码输入练习
  7. 串行异步通信_单片机串行口介绍
  8. python 机器学习 爬取关键字_5行Python就能爬取 3000+ 上市公司的信息?
  9. C语言中的二级指针和二维数组问题
  10. 解决win10系统中截图异常放大的问题