动态代理:
特点:字节码随用随创建,随用随加载
作用:不修改源码的情况下对方法进行增强
分类:
1.基于接口的动态代理
2.基于子类的动态代理
-------------------------------------------------------------------
1.基于接口的动态代理:
* 涉及的类:Proxy
* 提供者:JDK官方
如何创建代理对象:
* 使用Proxy中的newProxyInstance方法
创建代理对象的要求:
被代理类最少实现一个接口,如果没有则不能使用
newProxyInstance方法的参数:
* ClassLoader:类加载器
它是用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法
* Class[] :它是用于代理对象与被代理对象拥有相同的方法。固定写法
* InvocationHandler:用于提供增强的代码,它是让我们写如何代理。我们一般都是写一个接口的实现类,通常情况下都是匿名内部类,但不是必须的。
此接口的实现类都是谁用谁写
2.基于子类的动态代理:
涉及的类:Enhancer
提供者:第三方cglib库
如何创建代理对象:
使用Enhancer中的create方法:
创建代理对象的要求:
* 被代理类不能是最终类
* create方法的参数:
* Class:指定一个字节码
* 它是用于指定被代理对象的字节码
* Callback:用于提供增强的代码
* 它是让我们写如何代理。我们一般都是写一个接口的实现类,通常情况下都是匿名内部类,但不是必须的。
* 此接口的实现类都是谁用谁写
* 我们一般写的都是该接口的子接口实现类:
MethodInterceptor