import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理。
* @author Bright Lee
*/
public class JdkDynamicProxyTest {
public static void main(String[] args) {
Interface target = new Class();
JdkDynamicProxyHandler handler = new JdkDynamicProxyHandler(target);
Interface proxy = (Interface) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
handler);
String result = proxy.getName();
System.out.println(result);
}
}
/**
* 定义一个接口,由动态代理实现该接口,并进行增强。
*/
interface Interface {
public String getName();
}
/**
* 接口的实现类。
*/
class Class implements Interface {
public String getName() {
return "MyName";
}
}
class JdkDynamicProxyHandler implements InvocationHandler {
private Object target;
public JdkDynamicProxyHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("getName")) {
String name = (String) method.invoke(target, args);
name = "My name is: " + name;
return name;
} else {
return null;
}
}
}
运行结果:
My name is: MyName