Java动态代理是一种在运行时动态创建代理对象来代替原始对象的机制。其实现与基本原理可以归纳如下:
一、实现方式
Java中动态代理的实现主要依赖于两种方式:JDK动态代理和Cglib动态代理。
-
JDK动态代理:
- 利用
java.lang.reflect
包中的Proxy
类和InvocationHandler
接口来生成动态代理类。 - 被代理的对象必须实现一个或多个接口,因为代理类会实现与被代理对象相同的接口。
- 通过实现
InvocationHandler
接口,并在其invoke
方法中定义代理逻辑,可以拦截对代理对象的方法调用,并在其中添加额外的处理逻辑。 - 使用
Proxy.newProxyInstance
方法动态创建代理对象,该方法接收三个参数:类加载器(通常使用被代理对象的类加载器)、代理类需要实现的接口数组以及InvocationHandler
实现类的实例。
- 利用
-
Cglib动态代理:
- Cglib(Code Generation Library)是一个第三方代码生成类库,它可以在运行时动态生成某个类的子类,从而实现对目标对象功能的扩展。
- 与JDK动态代理不同,Cglib代理的对象无需实现接口,因此它可以代理没有实现接口的类。
- Cglib通过继承的方式创建动态代理类,因此如果某个类被标记为