【知识点】Java代理实现方式
Java 代理的几种实现方式
静态代理
通过创建一个代理类来控制对目标对象的访问(也就是手动编写一个代理类)。
静态代理的优点是易于理解和实现,缺点是每个接口都需要定义一个代理类,而且功能较弱。
动态代理
动态代理分两种,Proxy接口代理和CGLib代理
接口代理
Proxy 代理是JDK内置代理方式,通过接口实现,使用反射动态实现一个实现相同接口的代理类,来达到代理功能。
因此只能代理接口(或者说实现接口的类)。
CGLib
CGLib(Code Generation Library)通过ASM动态生成子类的方式进行代理,因此不能代理final
类。
ASM:Assembly,字节码修改技术
Spring 中的动态代理:
Spring 默认使用JDK代理方式,如果类没有实现接口则会选择CGLib进行代理。
使用JDK Proxy类进行代理不需要引入第三方库,同时类也需要实现一个接口,符合Java面向接口编程的最佳实践。