java 动态代理范例 InvocationHandler与Proxy,拦截与代理

java.lang.reflect.Proxy,
Proxy 提供用于创建动态代理类和实例的静态方法.
newProxyInstance()
返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
(详见api文档)

java.lang.reflect.InvocationHandler,
InvocationHandler 是代理实例的调用处理程序 实现的接口。
invoke()
在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上

调用此方法。

JDK1.2以后提供了动态代理的支持,程序员通过实现java.lang.reflect.InvocationHandler接口提供一个拦截处理器,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用。

Java动态代理只能对实现了接口的类生成代理,不能针对类。其实现主要是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现。

接口类源代码:

Java代码
  1. public interface HelloWorld {
  2. public void sayHelloWorld();
  3. }

实现类源代码:

Java代码
  1. public class HelloWorldImpl implements HelloWorld {
  2. public void sayHelloWorld() {
  3. System.out.println("Hello World!");
  4. }
  5. }

拦截器源代码:

Java代码
  1. public class HelloWorldHandler implements InvocationHandler {
  2. //目标对象
  3. private Object targetObject;
  4. public HelloWorldHandler(Object targetObject){
  5. this.targetObject = targetObject;
  6. }
  7. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  8. System.out.println("方法调用前。。。");
  9. Object result = method.invoke(this.targetObject, args);
  10. System.out.println("方法调用结束");
  11. return result;
  12. }
  13. }

测试代码:

Java代码
  1. public class HelloWorldTest {
  2. public static void main(String[] args) {
  3. //业务对象
  4. HelloWorld obj = new HelloWorldImpl();
  5. //拦截器对象
  6. HelloWorldHandler handler = new HelloWorldHandler(obj);
  7. //返回业务对象的代理对象
  8. HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance(
  9. obj.getClass().getClassLoader(),
  10. obj.getClass().getInterfaces(),
  11. handler);
  12. //通过代理对象执行业务对象的方法
  13. proxy.sayHelloWorld();
  14. }
  15. }

测试结果:

Html代码
  1. 方法调用前。。。
  2. Hello World!
  3. 方法调用结束

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/jgig11/p/4605177.html

java 动态代理范例 InvocationHandler与Proxy相关推荐

  1. Java动态代理之InvocationHandler最简单的入门教程

    网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...

  2. Java动态代理之InvocationHandler最简单的入门教程 1

    网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...

  3. java动态代理三座大山InvocationHandler、newProxyInstance()和invoke()

    先分享记录些博主的文章: <SSM框架>2Spring详解-KuangStudy-文章 java动态代理Proxy.newProxyInstance_徐海兴的专栏-CSDN博客_proxy ...

  4. Java动态代理详解(Proxy+InvocationHandler)

    文章目录 1. 什么是代理 2. 静态代理 2.1 静态代理代码示例 2.2 静态代理总结 2.3 静态代理优缺点 3. 动态代理 3.1 动态代理概念 3.2 动态代理例子 4. 原理解析 1. 什 ...

  5. java 动态代理深度学习(Proxy,InvocationHandler)

    http://hi.baidu.com/malecu/item/9e0edc115cb597a1feded5a0 http://www.iteye.com/topic/683613 http://bl ...

  6. Java动态代理InvocationHandler和Proxy学习笔记

    java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心: 1.Inv ...

  7. JDK的动态代理深入解析(Proxy,InvocationHandler)(转)

    一.什么是动态代理 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际 ...

  8. Java动态代理InvocationHandler的一点感悟

    目录 初衷 动态代理 实例讲解 总结 初衷 在研究Retrofit源码中,在创建网络请求接口实例时,就是通过Java动态代理模式,动态生成网络请求接口的代理类,并将代理类的实例创建交给了Invocat ...

  9. java动态代理【一】

    java动态代理的定义:为其他目标类的方法增加切面的逻辑,即在执行目标类方法的时候,先去执行一段如校验检测的逻辑代码.java通俗一点就是生成一个继承目标类的子类,并在每个调用方法都添加一段逻辑. 应 ...

最新文章

  1. 爱因斯坦《我的世界观》
  2. java 连接 sql2005,java与sql server2005 连接有关问题
  3. keil lic_LIC的完整形式是什么?
  4. java后端模拟http请求_Http请求后端
  5. ubuntu编译ubus及相关依赖库
  6. Spring Boot 2.0 开源项目--云收藏。收藏你所喜欢的一切。
  7. linux目录名乱码,为什么挂载中文目录或文件名是乱码?
  8. Go36-32-context.Context
  9. 程序员如何勇敢说“不”!
  10. 北斗三号频点_定位精度超越GPS!紫光展锐推出支持北斗三代的四合一芯片
  11. Android开发网上的一些重要知识点
  12. TensorRT 进阶用法
  13. window.dialogArguments的用法
  14. 光纤传输与网络技术习题整理
  15. 子网地址和广播地址的计算
  16. 超频到3200最佳时序_攒啥电脑呢?笔记本内存也要超频?
  17. 中国科学院大学2019年数学分析考研试题
  18. linux设备i2c优先级,Linux设备之I2C
  19. 20190918爱奇艺2020校招题
  20. JavaWeb过滤器(Filter)

热门文章

  1. Com/ATL编程 一些学习链接
  2. 近期机器学习竞赛汇总~总奖池超三百万人民币!
  3. Datawhale 一周年,生日快乐!
  4. 重磅推荐!日立开源语义分割数据集标注工具Semantic Segmentation Editor
  5. 资深程序员才知道的30个Python技巧
  6. Windows安装Python教程
  7. java中怎么判断依赖关系,在Maven 2中,我如何知道依赖性来自哪个依赖?
  8. 终于有人把计算机视觉讲明白了。。。
  9. 深度学习在计算机视觉点云中的发展与未来
  10. 前沿 | 使用Transformers进行端到端目标识别