// 定义接口
interface MyService {
void methodA();
void methodB();
void methodC();
void methodD();
void methodE();
}
class MyServiceImpl implements MyService {
@Override
public void methodA() {
System.out.println("执行方法A");
}
@Override
public void methodB() {
System.out.println("执行方法B");
}
@Override
public void methodC() {
System.out.println("执行方法C");
}
@Override
public void methodD() {
System.out.println("执行方法D");
}
@Override
public void methodE() {
System.out.println("执行方法E");
}
}
class MyInvocationHandler implements InvocationHandler {
private final Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 只对方法B和方法E进行增强
if ("methodB".equals(method.getName())) {
System.out.println("=== 方法B增强开始 ===");
Object result = method.invoke(target, args);
System.out.println("=== 方法B增强结束 ===");
return result;
} else if ("methodE".equals(method.getName())) {
System.out.println("=== 方法E增强开始 ===");
Object result = method.invoke(target, args);
System.out.println("=== 方法E增强结束 ===");
return result;
} else {
// 其他方法不增强,直接执行
return method.invoke(target, args);
}
}
}
public class ProxyExample {
public static void main(String[] args) {
// 创建目标对象
MyService target = new MyServiceImpl();
// 创建代理对象
MyService proxy = (MyService) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new MyInvocationHandler(target)
);
// 测试所有方法
System.out.println("调用方法A:");
proxy.methodA();
System.out.println("\n调用方法B:");
proxy.methodB();
System.out.println("\n调用方法C:");
proxy.methodC();
System.out.println("\n调用方法D:");
proxy.methodD();
System.out.println("\n调用方法E:");
proxy.methodE();
}
}