首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java中处理事务的署理Proxy模式

2012-10-28 
Java中处理事务的代理Proxy模式我们知道,在Hibernate中除开查询数据之外.对数据库进行,添加,修改,删除数据

Java中处理事务的代理Proxy模式

我们知道,在Hibernate中除开查询数据之外.对数据库进行,添加,修改,删除数据的时,需要对事务的手动提交.

在session对数据保存数据时,都需要手动开启事务,这样的操作非常的繁琐.

所以,我们决定使用Proxy类.去帮助我们处理,这样的操作.

?

Transaxtion tx = session.beginTransaction();

session.save(obj);

tx.commit();

?

?

Proxy类,具体的实现如下:

package pack.hibernate.basedao;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import org.hibernate.Session;import org.hibernate.Transaction;import pack.hibernate.sessionfactory.HibernateSessionFactory;/** * 动态代理类; * 必须实现InvocationHandler * @author zhouhaitao * */public class MyProxy implements InvocationHandler{//根据构造方法给业务对象初始化;//代理业务对象private Object service;public MyProxy(Object service){this.service = service;}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {Session session = HibernateSessionFactory.getSession();Transaction tr = session.beginTransaction();Object obj = null;try {//会自动调用反射方法(调用原来的业务方法)obj = method.invoke(service, args);tr.commit();} catch (Throwable e) {            tr.rollback();e.printStackTrace();}return obj;}}

?

之后,通过代理工厂负责,创建创建每一个的事务代理的实例.具体代码如下:

package pack.hibernate.basedao;import java.lang.reflect.Proxy;/** * 根据代理类生成业务代理对象; * @author zhouhaitao  */public class MyServiceFactory { public static Object getObject(Object service){   //1.service加载器   //2.service实现的接口   //3.代理对象   return Proxy.newProxyInstance(service.getClass().getClassLoader(), service.getClass().getInterfaces(),new MyProxy(service));   }}

?

//然后,我们再Struts Action中. 根据UserLoginServiceImpl业务实现类,通过

MyServiceFactory工厂。获得LoginService接口. 则使用这个接口对象.进行操作即可。

?

ILoginService uis=(ILoginService)MyServiceFactory.getObject(new UserLoginServiceImpl());

?

?

?

?

?

热点排行