java 动态代理范例 InvocationHandler与Proxy
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接口用来约束调用者实现。
接口类源代码:
- public interface HelloWorld {
- public void sayHelloWorld();
- }
实现类源代码:
- public class HelloWorldImpl implements HelloWorld {
- public void sayHelloWorld() {
- System.out.println("Hello World!");
- }
- }
拦截器源代码:
- public class HelloWorldHandler implements InvocationHandler {
- //目标对象
- private Object targetObject;
- public HelloWorldHandler(Object targetObject){
- this.targetObject = targetObject;
- }
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- System.out.println("方法调用前。。。");
- Object result = method.invoke(this.targetObject, args);
- System.out.println("方法调用结束");
- return result;
- }
- }
测试代码:
- public class HelloWorldTest {
- public static void main(String[] args) {
- //业务对象
- HelloWorld obj = new HelloWorldImpl();
- //拦截器对象
- HelloWorldHandler handler = new HelloWorldHandler(obj);
- //返回业务对象的代理对象
- HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance(
- obj.getClass().getClassLoader(),
- obj.getClass().getInterfaces(),
- handler);
- //通过代理对象执行业务对象的方法
- proxy.sayHelloWorld();
- }
- }
测试结果:
- 方法调用前。。。
- Hello World!
- 方法调用结束
转载于:https://www.cnblogs.com/jgig11/p/4605177.html
java 动态代理范例 InvocationHandler与Proxy相关推荐
- Java动态代理之InvocationHandler最简单的入门教程
网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...
- Java动态代理之InvocationHandler最简单的入门教程 1
网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...
- java动态代理三座大山InvocationHandler、newProxyInstance()和invoke()
先分享记录些博主的文章: <SSM框架>2Spring详解-KuangStudy-文章 java动态代理Proxy.newProxyInstance_徐海兴的专栏-CSDN博客_proxy ...
- Java动态代理详解(Proxy+InvocationHandler)
文章目录 1. 什么是代理 2. 静态代理 2.1 静态代理代码示例 2.2 静态代理总结 2.3 静态代理优缺点 3. 动态代理 3.1 动态代理概念 3.2 动态代理例子 4. 原理解析 1. 什 ...
- java 动态代理深度学习(Proxy,InvocationHandler)
http://hi.baidu.com/malecu/item/9e0edc115cb597a1feded5a0 http://www.iteye.com/topic/683613 http://bl ...
- Java动态代理InvocationHandler和Proxy学习笔记
java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心: 1.Inv ...
- JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
一.什么是动态代理 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际 ...
- Java动态代理InvocationHandler的一点感悟
目录 初衷 动态代理 实例讲解 总结 初衷 在研究Retrofit源码中,在创建网络请求接口实例时,就是通过Java动态代理模式,动态生成网络请求接口的代理类,并将代理类的实例创建交给了Invocat ...
- java动态代理【一】
java动态代理的定义:为其他目标类的方法增加切面的逻辑,即在执行目标类方法的时候,先去执行一段如校验检测的逻辑代码.java通俗一点就是生成一个继承目标类的子类,并在每个调用方法都添加一段逻辑. 应 ...
最新文章
- 爱因斯坦《我的世界观》
- java 连接 sql2005,java与sql server2005 连接有关问题
- keil lic_LIC的完整形式是什么?
- java后端模拟http请求_Http请求后端
- ubuntu编译ubus及相关依赖库
- Spring Boot 2.0 开源项目--云收藏。收藏你所喜欢的一切。
- linux目录名乱码,为什么挂载中文目录或文件名是乱码?
- Go36-32-context.Context
- 程序员如何勇敢说“不”!
- 北斗三号频点_定位精度超越GPS!紫光展锐推出支持北斗三代的四合一芯片
- Android开发网上的一些重要知识点
- TensorRT 进阶用法
- window.dialogArguments的用法
- 光纤传输与网络技术习题整理
- 子网地址和广播地址的计算
- 超频到3200最佳时序_攒啥电脑呢?笔记本内存也要超频?
- 中国科学院大学2019年数学分析考研试题
- linux设备i2c优先级,Linux设备之I2C
- 20190918爱奇艺2020校招题
- JavaWeb过滤器(Filter)