整体认识
JDK动态代理是基于接口的代理,也就是说目标对象一定要实现某个接口。
实现原理
- 获取被代理对象引用,得到它的接口
- 通过反射重新生成一个代理对象,该代理类实现被代理对象的所有接口(注意:这里可能有很多接口,接口多实现),
- 生成代理类字节码,将字节码存到磁盘中,重新编译,加载到JVM中,返回该代理对象的实例。
- 在代理对象中,可以对目标方法实现前后增强处理
- 执行代理对象的目标方法,返回执行结果。
使用JDK动态代理元素
- 接口
- 接口实现类
- InvocationHandler的实现类,该类中对目标函数进行增强
- Proxy.newProxyInstance(classLoader, interfaces(), InvocationHandler)
生成代理对象是用的反射,关于反射的使用,可以看看Mybatis中的反射,已经将代理对象进行缓存。