一、作用
1.功能增强: 在你原有的功能上,增加了额外的功能。
2.控制访问: 代理类不让你访问目标,例如商家不让用户访问厂家。
jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理
二、JDK动态代理的实现
1、InvocationHandker(调用处理器)
invoke()
表示你的代理要干什么。
1.创建类实现接口InvocationHandler
2.重写invoke()方法, 把原来静态代理中代理类要完成的功能写在这
2、Method
通过Method可以执行某个目标类的方法,method.invoke(目标对象,方法参数)
3、Proxy
静态方法 newProxyInstance()
作用是: 创建代理对象, 等同于静态代理中的TaoBao taoBao = new TaoBao();
1、ClassLoader loader 类加载器,负责向内存中加载对象的。 使用反射获取对象的ClassLoader。
a.getCalss().getClassLoader(), 目标对象的类加载器
2. Class<?>[] interfaces: 接口, 目标对象实现的接口,也是反射获取的。
3. InvocationHandler h : 我们自己写的,代理类要完成的功能。返回值:代理对象
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)