1. 动态代理技术概述
在Java开发中,动态代理是实现AOP(面向切面编程)的核心技术之一。它允许我们在运行时动态创建代理对象,而无需为每个目标类手动编写代理类。目前主流的动态代理实现有两种:JDK动态代理和CGLIB动态代理。
我最初接触动态代理是在实现日志记录功能时。当时需要在几十个服务方法前后添加日志记录,如果手动修改每个方法,不仅工作量大,而且容易出错。动态代理完美解决了这个问题,让我第一次体会到它的强大之处。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. JDK动态代理深度解析
2.1 实现原理与工作机制
JDK动态代理基于Java反射机制实现,核心是java.lang.reflect.Proxy类和InvocationHandler接口。它的工作原理可以概括为:
- 在运行时通过
Proxy.newProxyInstance()方法动态生成代理类 - 代理类实现与目标类相同的接口
- 所有方法调用都被转发到
InvocationHandler.invoke()方法
java复制public interface UserService {
void saveUser(User user);
}
public class UserServiceImpl implements UserService {
public void saveUser(User user) {
// 业务逻辑
}
}
public class LogInvocationHandler implements InvocationHandler {
private Object target;
public LogInvocationHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After method: " + method.getName());
return result;
}
}
// 使用示例
UserService proxy = (UserService) Proxy.newProxyInstance(
UserService.class.getClassLoader(),
new Class[]{UserService.class},
new LogInvocationHandler(new UserServiceImpl())
);
