Java 代理的几种实现方式

静态代理

通过创建一个代理类来控制对目标对象的访问(也就是手动编写一个代理类)。

静态代理的优点是易于理解和实现,缺点是每个接口都需要定义一个代理类,而且功能较弱。

动态代理

动态代理分两种,Proxy接口代理和CGLib代理

接口代理

Proxy 代理是JDK内置代理方式,通过接口实现,使用反射动态实现一个实现相同接口的代理类,来达到代理功能。

因此只能代理接口(或者说实现接口的类)。

CGLib

CGLib(Code Generation Library)通过ASM动态生成子类的方式进行代理,因此不能代理final

ASM:Assembly,字节码修改技术


Spring 中的动态代理:

Spring 默认使用JDK代理方式,如果类没有实现接口则会选择CGLib进行代理。

使用JDK Proxy类进行代理不需要引入第三方库,同时类也需要实现一个接口,符合Java面向接口编程的最佳实践。

标签: Java, 知识点

添加新评论