一、静态代理
1、优点
2、 缺点
3、示例
interface UserService {
void addUser(String user);
}
class UserServiceImpl implements UserService {
public void addUser(String user) {
System.out.println("Add user: " + user);
}
}
class UserServiceProxy implements UserService {
private UserService userService;
public UserServiceProxy(UserService userService) {
this.userService = userService;
}
public void addUser(String user) {
System.out.println("Logging: Adding user " + user);
userService.addUser(user);
}
}
二、动态代理
1、优点
2、 缺点
3、示例
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface UserService {
void addUser(String user);
}
class UserServiceImpl implements UserService {
public void addUser(String user) {
System.out.println("Add user: " + user);
}
}
class DynamicProxyHandler implements InvocationHandler {
private Object target;
public DynamicProxyHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Logging: Adding user " + args[0]);
return method.invoke(target, args);
}
}
public class Main {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
UserService proxyInstance = (UserService) Proxy.newProxyInstance(
UserService.class.getClassLoader(),
new Class[]{UserService.class},
new DynamicProxyHandler(userService)
);
proxyInstance.addUser("Alice");
}
}
三、总结