您的位置:首页 > 编程语言 > Java开发

JDK的动态代理

2015-06-01 15:56 375 查看
public interface PersonDao {
public void savePerson();
public void updatePerson();
}


public class PersonDaoImpl implements PersonDao{
public void savePerson() {
System.out.println("save person");
}
public void updatePerson() {
// TODO Auto-generated method stub
System.out.println("update person");
}
}


public class Transaction {
public void beginTransaction(){
System.out.println("begin transaction");
}

public void commit(){
System.out.println("commit");
}
}


public class MyInterceptor implements InvocationHandler{
private Object target;
private Transaction transaction;

public MyInterceptor(Object target, Transaction transaction) {
super();
this.target = target;
this.transaction = transaction;
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
this.transaction.beginTransaction();
method.invoke(this.target, args);
this.transaction.commit();
return null;
}
}


/**
* 1、产生的代理类与接口是什么关系?
*     代理类实现了接口
* 2、代理类的方法体的内容是什么?
*     方法体的内容就是拦截器中invoke方法体的内容
* 3、拦截器的作用是什么?
*     完成invoke方法体中的内容
* 4、拦截器中的invoke方法的参数method
*     客户端调用哪个方法,method就代理哪个方法
* 4、拦截器中的invoke方法是什么?
*     是代理类的方法
*/
public class JDKProxyTest {
@Test
public void testJDKProxy(){
Object target = new PersonDaoImpl();
Transaction transaction = new Transaction();
MyInterceptor interceptor = new MyInterceptor(target, transaction);
//产生代理对象
/**
* 第一个参数
*    类加载器
* 第二个参数
*    目标类实现的所有的接口
* 第三个参数
*    拦截器
*/
PersonDao personDao = (PersonDao)Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), interceptor);
personDao.updatePerson();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: