动态代理:在不改变源码的情况下,对已有的方法进行增强(运行期增强),直接上代码,用法都在注释里,场景:定义一个演员类,演员可以做普通表演和危险表演,对演员类的方法进行增强
final ActerImpl acter = new ActerImpl();
/**
* 动态代理:
* 作用:在不改变源码的情况下,对已有的方法进行增强
* 特点:字节码随用随创建,随用随加载
* 分类:基于接口的动态代理
* 基于子类的动态代理
* 基于接口的动态代理:
* 要求:被代理类至少实现一个接口
* 涉及类:proxy
* 提供者:jdk
* 创建对象的方法:newProxyInstance
* 方法的参数:
类加载器:ClassLoader,加载代理对象字节码,和被代理对象用一个类加载器
* 字节码数组:Class[] 代理对象和被代理对象要具有相同的行为,实现相同接口
* 如果被代理对象是一个实现类:对象.getClass().getinterfaces()
* 如果被代理对象是一个接口:new Class[]{interface}
* 增强方法的接口:InvocationHandler,如何增强,如何代理
*/
Acter proxyActer =(Acter) Proxy.newProxyInstance(acter.getClass().getClassLoader(),
acter.getClass().getInterfaces(),
new InvocationHandler() {
/**
* 作用:被代理对象执行每一个方法都会执行该方法,具有拦截功能
* @param proxy 代理对象的引用
* @