`

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());

 

 

 

 

 

分享到:
评论

相关推荐

    Java 动态代理.md

    动态代理在 Java 中有着广泛的应用,比如 AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理等。 在了解动态代理前,我们需要先了解一下什么是代理模式。 代理模式 代理模式...

    java 常用设计模式chm

    设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问. 为什么要使用Proxy? 1.授权机制 不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java面试800题

    facade门面模式、proxy代理模式、adapter适配器(变压器)模式、composite合成模式、decorator装饰模式、bridge桥梁模式、flyweight享元模式 行为模式 template模板方法模式、memento备忘录模式、observer观察者模式...

    java 面试题 总结

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    二十三种设计模式【PDF版】

    设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用 JDBC针对不同的数据库编程,Facade提供了一种灵活的实现. 设计模式之 Composite(组合) ...

    超级有影响力霸气的Java面试题大全文档

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    Jakarta commons docs API CHM 格式

    commons-proxy 创建动态代理的库 commons-scxml commons-transaction 处理多级事务的集合 commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs ...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-proxy 创建动态代理的库 commons-scxml commons-transaction 处理多级事务的集合 commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs ...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    IIS6.0 IIS,互联网信息服务

    最后,关键一步还有就是将你的电脑变为网络中的一台服务器,所以你要在你的电脑中装上一个合适的代理服务器软件并运行。 二、本部分常见问题解答 Q:如何修改FTP服务器登录成功或退出时的系统提示信息? A:在相应...

    在线考试系统文献综述

    因此我们在应用服务器上建立WEB 时,采用微软的IIS(Microsoft Internet Information Server4.0),为了系统的安全性,安装微软的Proxy Server 作为代理服务器。当然,实际操作时更应该注重IIS本身的安全性。而IIS的...

    开涛高可用高并发-亿级流量核心技术

    3.11.1 请求解析和业务处理线程池分离 57 3.11.2 业务线程池隔离 58 3.11.3 业务线程池监控/运维/降级 58 3.11.4 如何使用Servlet 3异步化 59 3.11.5 一些Servlet 3异步化压测数据 64 4 限流详解 66 4.1 限流算法 67...

Global site tag (gtag.js) - Google Analytics