java动态代理
来源:互联网 发布:二级c语言什么时候考 编辑:程序博客网 时间:2024/06/18 17:43
Spring的AOP,Struts2的拦截器,都是java动态代理实现的例子。
一、前言
定义
按照代理的创建时期,代理类可以分为两种。
- 静态代理
由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件已经存在。 - 动态代理
在程序运行时,运用反射机制动态创建而成。
动态代理分类
关于ASM
ASM是一个java字节码操控框架。
- 能以二进制的形式修改已有类或动态生成类
- 直接产生二进制class文件
- 可以在类被加载入虚拟机之前动态改变类行为 -
使用动态代理要先了解的类和接口
- Proxy 类
2. InvocationHandler接口
Object invoke(Object proxy, Method method, Object[] args)
集中处理动态代理类上的所有方法调用。
第一个参数既是代理类实例,第二个参数是被调用的方法对象,第三个方法是调用参数。
调用处理器根据这三个参数进行预处理或分派到委托类实例上发射执行。
二、jdk动态代理
jdk通过 java.lang.reflect.Proxy 包来实现动态代理,创建机制是通过接口。
当RealObject创建一个对象时,jdk会进行一下步骤:
- 获取RealObject上的所有接口
- 确定要生成的代理类的类名Proxy
- 确定要实现的接口信息,在程序运行时动态创建该代理类Proxy的字节码
- 根据字节码转化为对应的class对象
- 创建InvocationHandler的实例handler,用来处理Proxy所有方法调用
- Proxy的class对象以创建的handler对象为参数,实例化一个Proxy对象
jdk的动态代理中,某个类必须有实现的接口,而生成的代理类也只能代理该类接口定义的方法。如果该类没有实现接口,那么这个类就不能同JDK产生动态代理了。
三、cglib动态代理
cglib实现动态代理的过程:
- 查找类上所有非final的public类型的方法定义
- 将这些方法的定义转化成字节码
- 将组成的字节码转换成class对象
- 实现MethodInterceptor接口,用来处理对代理类上所有方法的请求
0 0
- Java 代理,动态代理
- [Java] Java 动态代理
- java代理及动态代理
- java代理模式--动态代理
- Java静态代理、动态代理
- Java 代理之 动态代理
- Java 代理与动态代理
- java静态代理,动态代理
- 代理模式&java动态代理
- Java代理与动态代理
- Java静态代理动态代理
- JAVA代理模式--动态代理
- java 代理和动态代理
- JAVA动态代理 代理模式
- Java动态代理--jdk代理
- Java动态代理--cglib代理
- Java 代理与动态代理
- java代理模式-动态代理
- Codeforces Round #364 (Div. 1) B. Connecting Universities(图论)
- 将已有项目提交到github/从github上pull到本地
- Leetcode #5 Longest Palindromic Substring
- 389. Find the Difference
- JAVA基础6.50——对象转型
- java动态代理
- DFS深度优先搜索(1)--poj3984(基本模板题)
- iOS开发——微信支付业务流程说明(附官方文档接口)
- JAVA基础6.51——多态的概述(1)
- 最近做了一个怪物手册的功能
- 易语言 取自定义数据类型的大小
- JVM性能调优
- 点滴记录——Ubuntu 14.04中安装Sublime Text 3并使用SublimeClang插件
- 如何最快速实现倒计时功能和限时抢购功能