标签:
public interface IPerson {
public void say();
public void run();
public void sleep();
}
public class PersonImpl implements IPerson {
@Override
public void say() {
LogUtil.e("Person say");
}
@Override
public void run() {
LogUtil.e("Person run");
}
@Override
public void sleep() {
LogUtil.e("Person sleep");
}
}
public class PersonHandle implements InvocationHandler {
private Object object;//保持代理的原始对象
public PersonHandle(Object object) {
super();
this.object = object;//构造注入
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result=null;
//如果是say方法,就有前置操作和后置操作
if(method.getName().equals("say")){
doBefore();
result=method.invoke(object,args);
doAfter();
}
//如果是run方法,就只有后置操作
else if(method.getName().equals("run")){
result=method.invoke(object,args);
doAfter();
}
//如果是sleep方法,就啥都不干
else if(method.getName().equals("run")){
}
return result;
}
private void doBefore() {
LogUtil.e("before method invoke");
}
private void doAfter() {
LogUtil.e("after method invoke");
}
}
public class TestClient extends InstrumentationTestCase {
public void testMain() {
LogUtil.e("TestClient:[START]");
IPerson person=new PersonImpl();
InvocationHandler handler=new PersonHandle(person);
IPerson proxy= (IPerson) Proxy.newProxyInstance(person.getClass().getClassLoader(),person.getClass().getInterfaces(),handler);
proxy.say();
proxy.run();
LogUtil.e("TestClient:[END]");
}
}
标签:
原文地址:http://www.cnblogs.com/yutianran/p/5033134.html