package com.bjpowernode.pattern;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 这是一个描述代理类的类,而不是代理类,因为动态代理类是动态生成的
* @author Kevin
*
*/
public class LogHanlder implements InvocationHandler {
/**
* 目标类的对象
*/
private Object targetObject;
/**
* 创建代理类对象
* @param targetObject 目标类的对象
* @return 代理类对象
*/
public Object newProxyInstance(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
/**
* 调用代理类的方法时就会调用该方法 (invoke)
* @param proxy 代理类对象
* @param method 代理类方法
* @param args 代理类方法参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 输出代理类方法
System.out.println("Start->>" + method.getName());
// 输出代理类方法的参数
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
// 调用目标方法的返回值
Object returnValue = null;
try {
// 执行代理类的方法时去调用目标类的方法
returnValue = method.invoke(targetObject, args);
System.out.println("success->>" + method.getName());
} catch (Exception e) {
e.printStackTrace();
System.out.println("error->>" + method.getName());
}
return returnValue;
}
}
JDK动态代理
最新推荐文章于 2025-03-17 16:36:32 发布