黑马程序员技术交流社区
标题: 完成事务的代理类 [打印本页]
作者: 血剑无痕 时间: 2013-10-29 13:09
标题: 完成事务的代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
/**
* 事务的代理类,可以代理任意的Service
*/
public class TxProxy implements InvocationHandler{
private Object src; //声明被代理类对象
private TxProxy(Object src){//在私有的构造中给成员设置值
this.src=src;
}
/**
* 提供一个静态的方法返回代理对象
*/
public static Object factory(Object src){
Object proxyedObj = //生成被代理类的接口的子类
Proxy.newProxyInstance(
TxProxy.class.getClassLoader(),
src.getClass().getInterfaces(),
new TxProxy(src));
return proxyedObj;
}
/**
* 以下是执行的句柄,当调用代理类的任意方法时都会调用这个方法
* 在这儿是管理事务的关键
*/
public Object invoke(Object proxy, Method method, Object[]args)
throws Throwable {
//第一步:声明连接
Connection con = null;
Object returnValue = null;
try{
//第二步:获取连接
con = DataSourceUtils.getConn();
//第三步:设置事务的开始
con.setAutoCommit(false);
//第四步:调用目标类(被代理类)的方法
returnValue = method.invoke(src, args);
//第五步:调用如果成功
con.commit();
}catch(Exception e){
con.rollback();
throw e;
}finally{
con.close();
DataSourceUtils.remove();
}
return returnValue;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |