`

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代码 Proxy(4)

    4. `ImageA.java`:这可能是一个处理图像的类,可能是代理模式中的目标对象,也可能是在代理类中被代理的对象。 5. `PageProxy.java`:这可能是一个页面代理类,用于处理与页面相关的操作,可能是为了添加额外的...

    java Proxy 动态代理

    在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类是用于创建一个代理对象,而InvocationHandler接口则定义了代理对象调用方法时的行为。 1. **...

    详解设计模式中的proxy代理模式及在Java程序中的实现

    在Java编程中,Proxy模式的应用非常广泛,尤其是在处理远程调用、权限控制、事务管理等场景。 1. **代理模式的概念** 代理模式是一种结构型设计模式,它创建了对象的一个代理以控制对这个对象的访问。代理对象在...

    JAVA设计模式(代理模式)

    代理模式是软件设计模式中的一个重要组成部分,它在Java编程中扮演着举足轻重的角色。代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象可以控制对原对象的访问。在实际应用中,代理模式常...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    在这些模式中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它允许我们为一个对象创建一个代理,该代理对象在客户端和目标对象之间起到中介的作用,可以增加额外的功能或控制访问。 代理模式分为两种...

    JAVA设计模式之代理模式实例

    代理模式的应用场景非常广泛,比如在数据访问对象(DAO)中添加缓存功能、远程服务调用、事务管理等。理解并熟练运用代理模式,能够帮助开发者更好地设计和优化系统,提高代码的灵活性和可扩展性。在实际项目中,...

    Java中的代理模式Demo

    在Java编程中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,在对象周围创建一个代理对象,这个代理对象可以扩展目标对象的功能或者控制对目标对象的访问。代理模式通常用于实现动态代理、远程代理...

    代理模式java代码 Proxy(5) 2个代理类

    在这个主题“代理模式java代码 Proxy(5) 2个代理类”中,我们可以理解为将介绍两种不同的代理类实现。 1. 静态代理 在静态代理中,我们需要创建一个接口,然后让目标对象和代理对象都实现这个接口。代理类会持有...

    设计模式之代理模式proxy

    代理模式可以通过继承、接口或动态代理(如Java的`java.lang.reflect.Proxy`类)来实现。具体选择哪种方式取决于实际需求和语言特性。 总的来说,代理模式是一种灵活的设计模式,它可以让我们在不修改原有对象的...

    Java 静态代理模式

    Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,...然而,由于其存在的局限性,如需更灵活的代理机制,可以考虑使用Java的动态代理模式(如Java.lang.reflect.Proxy)。

    Proxy代理模式经典实例(绝对OOP)

    Proxy代理模式是面向对象设计模式中的重要组成部分,它在软件工程中扮演着关键角色,尤其在Java编程中。代理模式的主要目的是为一个对象提供一个替身或者占位符,以便控制对这个对象的访问。这种设计模式允许我们...

    java装饰模式及动态代理模式示例源码

    装饰模式和动态代理模式是Java编程中两种非常重要的设计模式,它们都在代码的扩展性和灵活性方面发挥着关键作用。下面将分别对这两种模式进行详细解释,并结合手写的数据库连接池和动态代理模式的使用进行深入探讨。...

    Java动态代理[动态类Proxy的使用]

    本文将深入探讨Java中的动态代理,特别是基于`java.lang.reflect.Proxy`类的使用。 首先,`java.lang.reflect.Proxy`是Java标准库中用于生成动态代理类的关键类。它允许我们创建一个新的接口实现类,而无需手动编写...

    Java动态代理实现 Proxy InvocationHandler

    总结来说,Java动态代理通过`Proxy`和`InvocationHandler`提供了灵活的代码扩展机制,可以在运行时为对象创建代理,实现在不修改原有代码的基础上添加额外功能。这在处理需要拦截和增强的对象时非常有用,例如日志...

    代理模式java代码 Proxy(2)

    在Java中,`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是实现动态代理的关键。`InvocationHandler`接口定义了一个`invoke()`方法,当通过代理对象调用方法时,实际会执行这个方法,...

    java-sington-factory-proxy 开发模式

    动态代理主要应用于AOP(面向切面编程),如日志记录、事务处理等,而自定义代理则更灵活,可以根据需求定制代理行为。 ```java // 动态代理示例 interface Service { void doSomething(); } class RealService ...

    Java设计模式-代理模式

    总结来说,Java设计模式中的代理模式提供了一种优雅的方式来控制对目标对象的访问,并扩展其功能。动态代理更是使得这一过程更加灵活,降低了代码的维护成本。通过学习和应用代理模式,开发者可以更好地设计和实现...

    java proxy

    Java代理在编程中是一种强大的设计模式,主要用于在不修改原有对象的情况下增强或扩展其功能。在Java中,有两种主要的代理实现方式:静态代理和动态代理。 1. 静态代理: 静态代理是在编译时就已经确定了代理类和...

    Android设计模式之代理模式(Proxy Pattern)

    Java中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口可以实现动态代理。动态代理在Android中常用于实现事件监听、AOP(面向切面编程)等场景。 **Android中的应用** 1. **数据加载**...

    java 动态代理模式 适配器模式

    然后,创建一个实现了InvocationHandler接口的类,重写invoke方法,在invoke方法中处理业务逻辑并调用实际目标对象的方法。最后,通过Proxy.newProxyInstance方法生成代理对象,这个对象可以被用来代替原始的目标...

Global site tag (gtag.js) - Google Analytics