码迷,mamicode.com
首页 > 编程语言 > 详细

整理:Java动态代理

时间:2015-12-09 17:24:34      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

1.定义业务接口

public interface IPerson {
public void say();
public void run();
public void sleep();
}

2.实现业务接口

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");
}
}

3.定义一个动态代理类,实现InvocationHandler接口

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");
}
}

4.场景类

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]");
}

}

5.运行结果

技术分享





整理:Java动态代理

标签:

原文地址:http://www.cnblogs.com/yutianran/p/5033134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!