事务管理原理
wzs 2007-11-28 02:25:26 看了很一些网上的文章及spring事务源码但还不是很懂只知其一,下面代码是我疑惑的地方请高手指教:
spring事务基于Proxy代理机制实现的,Proxy代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class InterceptorProxy implements InvocationHandler
{
private Object proxyObject=null;
/**
*把obj实例与proxy绑定
*
/
public Object bind(Object obj)
{
this.proxyObject=obj;
Object proxyObj= Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
return proxyObj;
}
/**
* 拦截obj实例调用某个方法
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object retu=null;
/**
* 事务开始
*/
retu=method.invoke(this.proxyObject, args);
/**
* 事务结束
*/
return retu;
}
}
// 从上面看代码是没有问题但在指行的时候就有问题如:
public static void main(String[] args)
{
Service service=InterceptorProxy.bind(serviceObject);//假设serviceObject是一个Service类实例
/*
当我调用method1()方法是会触发InterceptorProxy.invoke()方法,此时在invoke()中可以定义事务begin(),
但当method1()执行完后事务进行commit(),请问如何在method2()与method1()完成一起commit()?Spring能做到这一点,
说明这需要如何使用设计模式问题,大侠解一下困惑,相信很多人都想知道这个问题
*/
service.method1();
service.method2();
}