package cn.everest.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class InvocationHandlerResearch implements InvocationHandler{
private Object object;
private Logging logging;
public InvocationHandlerResearch() {}
public InvocationHandlerResearch(Object object, Logging logging) {
this.object = object;
this.logging = logging;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// System.out.println("method.name: " + method.getName());
logging.recordLog();
Object invoke = method.invoke(object, args); //调用谁的方法,是目标对象object的方法
return invoke;
}
}
package cn.everest.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import org.junit.Test;
public class InvocationHandlerTest {
public InvocationHandlerTest() {}
@Test
public void testInvocationHandler(){
Object object = new PersonDaoImpl();
Logging logging = new Logging();
InvocationHandler research = new InvocationHandlerResearch(object, logging);
PersonDao daoImpl = (PersonDao) Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), research);
daoImpl.savePerson();
}
}