代理分类
静态代理
- 代理类是自己手工实现的,自己创建一个java类, 表示代理类
- 同时你所要代理的目标类是确定的
特点
- 实现简单
- 容易理解
缺点
- 当目标类增加了, 代理类可能也需要成倍的增加. 代理类数量过多
- 当你的接口中功能增加了, 或者修改了, 会影响众多的实现类. 厂家类,代理类都需要修改,影响较大
目标类和代理类很多的时候,建议使用动态代理
动态代理
- 在程序执行过程中,使用jdk的反射机制, 创建代理类对象,并动态的指定要代理目标类
- 动态代理是一种创建java对象的能力, 能创建代理类对象
- 可以给不同的目标随时创建代理
实现方式
- jdk动态代理
- 反射包 java.lang.reflect
- cglib动态代理
- 第三方的工具
Code Generation Library
- cglib的原理是继承, 通过继承目标类,创建它的子类,在子类中重写父类中的方法,实现功能的修改
- 要求目标类不能是final的,方法也不能是final的
- 目标类比较宽松, 只要继承就可以了,在很多的框架中使用
- 第三方的工具
cglib动态代理
导包
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
jdk动态代理
- InvocationHandler
- invoke(): 表示代理对象要执行的功能代码. 你的代理类要完成的功能就写在invoke()方法中
-
Method类
- 表示目标类中的方法
- 通过Method可以执行某个目标类的方法
- method.invoke(目标对象, 方法的参数)
-
Proxy类
- 创建代理对象.
- 使用Proxy类的方法, 代替new的使用
- Proxy.newProxyInstance()