JDK静态代理、JDK动态代理以及CGLIB动态代理

这里转载两篇好文章:“深入理解JDK动态代理机制” ,深入理解CGLIB动态代理机制 :
https://www.jianshu.com/p/471c80a7e831
https://www.jianshu.com/p/9a61af393e41?from=timeline&isappinstalled=0

1. JDK 静态代理和动态代理的比较

JDK静态代理与JDK动态代理之间
相似之处:

(1) 都要创建代理类,以及代理类都要实现接口。

不同之处
(1) 在静态代理中我们需要对哪个接口和哪个被代理类创建代理类,所以我们在编译前就需要代理类实现与被代理类相同的接口。并且直接在实现的方法中调用被代理类相应的方法;但是动态代理则不同,我们不知道要针对哪个接口、哪个被代理类创建代理类,因为它是在运行时被创建的

(2) JDK静态代理是通过直接编码创建的,而JDK动态代理是利用反射机制在运行时创建代理类的。

其实在动态代理中,核心是InvocationHandler。每一个代理的实例都会有一个关联的调用处理程序(InvocationHandler)。对待代理实例进行调用时,将对方法的调用进行编码并指派到它的调用处理器(InvocationHandler)的invoke方法。所以对代理对象实例方法的调用都是通过InvocationHandler中的invoke方法来完成的,而invoke方法会根据传入的代理对象、方法名称以及参数决定调用代理的哪个方法。
所以代理类其实是通过getProxyClass方法来生成的。

猜你喜欢

转载自blog.csdn.net/ZHANGYONGHAO604/article/details/82785990
今日推荐