1 名词解释
动态代理类 一个不需要编写的类, 由代码自动生成并加载.
代理接口 需要代理的普通接口
代理实例 代理类的实例
Invocation Handler 代理类的调用处理器
CGLIB 可以创建/修改字节码文件的工具包.
2
重要概念
动态代理类是指运行时创建并加载实现代理接口的类,代理类的实例叫代理实例, 代理实例的方法调用都会分发到实例所持有的Invocation Handler的invoke方法. 因为动态代理类的创建依赖接口,因此通过反射调用是类型安全的,不会调用到非代理接口外的方法.
3 原理
通过动态生成字节码并加载到内存,来实现类的动态加载.理论上可以支持创建任何形式的类.但为了防止代码乱用.业界流行两种方法:
第一种: 使用JAVA的动态代理机制, 这种方法采用实现接口并关联原始类的实例来实现重写原始类的方法.
第二种: 使用第三方包CGLIB等的动态代理机制, 这种方法采用继承的原始类方法来重写重写原始对象的方法.这种方法原理与第一种相同,本文略过.
4 规则
a. 多个接口类必须不同。
b. 多个接口类的方法返回值必须相同。
c. 多个接口类的方法重复时,只使用接口顺序靠前的接口的方法,后面接口的方法忽略。
d. 多个接口类的Object方法,不能重写(代理)。
e. 代理类可实现序列化、反序列化接口。
f. 接口数量最大不能超过65563。
g. 多个接口类为非public接口时,必须属于同一个包。
h. 多个接口类对于ClassLoader都是可见的。
i. 使用同一个ClassLoader与接口列表创建的代理类会缓存,供重复获取时使用。
j. 代理类不要引用ClassLoader,接口类与代理类, 避免垃圾不能回收。
k. 代理类使用InvocationHandler来重写代理方法。
5 场景
a. Spring AOP中的拦截器
b. Hibernate 的延迟加载
c. 日志,权限等代码注入。只需要知道对象。
分享到:
相关推荐
java动态代理类的实例
1:静态代理出现的实际背景,静态代理时如何演化成动态代理 2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic...4: 动态代理使用到基础理论:Class.forName("xxxx") 得到Class类 。
java 动态代理 测试类
Java试题-2:ArrayList类动态代理 什么是动态代理 动态代理该怎么实现
对代理模式与Java动态代理类的理解说明
动态代理及其生成的代理类,可以反编译查看其类的结构。
用dom4j和Procy实现复用的动态代理
类加载机制与动态代理吗,讲得很好对得资源分。
详细介绍了开发java动态代理用到的相关类,和动态代理类的特点!最后以完整示例代码的形式,展现了java动态代理开发的过程!
1 Java 概述 3 1.1 Java 定义 3 1.2 Java 的特点 3 1.3 Java 开发环境 5 Java 基本语法 7 数据类型 7 整数型 7 浮点型 7 字符型 8 布尔型 8 基础语法 8 运算符 8 Java 执⾏控制流程 11 条件语句 11 if语句 11 if......
java代理机制 JDK动态代理和cglib代理 详解
Java实现动态代理的两种方式。 相对来说cglib更加方便。可以实现为实现接口的类(非final类)
动态代理是指在运行时通过反射机制动态生成代理类,无需手动编写代理类。Java中提供了一个java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。代理类在运行时会根据被代理接口自动...
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,
Java类反射 动态代理 讲解的很细,很受用 分享给大家
在学习之前,先提出几个问题,带着问题来看代码: 1.什么是动态代理? 2.为什么使用动态代理? 3.使用它有哪些好处? 4.哪些地方需要动态代理?
Java动态代理实现数据源连接池,用代理类实现的连接池代码,绝对完整的案例,下载源码就能跑起来!Java动态代理实现数据源连接池,用代理类实现的连接池代码
java设计模式【之】JDK动态代理...代理类,接收父亲类对象,利用反射机制,创建一个代理对象(在内存中动态创建代理对象) * Proxy.newProxyInstance (ClassLoader(类加载器),interface(接口),handler(监听处理器))
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...