动态代理模式是一种在运行时才确定代理对象的灵活设计模式,旨在不修改原有代码的情况下,增强或控制目标对象的行为,常用于远程调用、事务处理或缓存等场景。
文章详细介绍了两种主要实现方式:
1. **JDK 动态代理:** 要求被代理类必须实现接口。它基于 Java 反射机制,通过实现 `InvocationHandler` 接口来定义代理逻辑,并使用 `Proxy.newProxyInstance()` 方法动态生成代理实例。其核心在于通过代理类实现目标接口,拦截方法调用。
2. **CGLIB 动态代理:** 不强制要求被代理类实现接口。它通过继承目标类生成一个子类作为代理(增强类),利用 `Enhancer` 类和 `MethodInterceptor` 接口实现方法拦截和增强,从而能够代理没有实现接口的普通类。
两种方式都允许在运行时为目标对象添加通用逻辑(如示例中的缓存),提高了代码的复用性和系统的可维护性。