Java动态代理:增强类方法调用问题
在Java中,动态代理主要用于实现对目标对象(被代理类)的任意方法增强。下面是一个关于增强类方法调用问题的例子:
- 首先创建一个被代理的类,比如
Person
:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
// 原始方法
public void sayHello() {
System.out.println("Hello, " + name);
}
}
- 然后创建一个动态代理类,比如
PersonProxy
:
import java.lang.reflect.Method;
public class PersonProxy implements InvocationHandler {
private final Object target;
public PersonProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before calling " + method.getName() + "...");
// 原始方法调用
Object result = method.invoke(target, args);
System.out.println("After calling " + method.getName() + "...");
return result;
}
}
- 最后使用动态代理来增强
Person
类的方法调用:
public class Main {
public static void main(String[] args) throws Throwable {
// 创建被代理对象
Person person = new Person("John Doe");
// 创建动态代理
Object proxy = new PersonProxy(person);
// 执行增强后的方法调用
proxy.sayHello();
}
}
在上述示例中,PersonProxy
会先打印出”Before calling…”,然后执行原始的sayHello()
方法,并打印出”After calling…”。这就是动态代理增强类方法调用的一个基本过程。
还没有评论,来说两句吧...