`
dolphin_1980
  • 浏览: 20588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

动态代理-事物

阅读更多

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;

public class TransactionHandler implements InvocationHandler {

private Object targetObject;

public Object createProxyObject(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
   targetObject.getClass().getInterfaces(),
   this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Connection conn = null;
Object retValue = null;
try {
conn = ConnectionManager.getConnection();
if (method.getName().startsWith("add") ||
method.getName().startsWith("delete") ||
method.getName().startsWith("modify")) {
System.out.println("begin transaction");
//开启事务
conn.setAutoCommit(false);
}

//调用目标对象上的业务逻辑方法
retValue = method.invoke(this.targetObject, args);

if (!conn.getAutoCommit()) {
System.out.println("commit transaction");
//提交事务
conn.commit();
}
// }catch(AppException e) {
// if (!conn.getAutoCommit()) {
// System.out.println("rollback transaction");
// //回滚事务
// conn.rollback();
// }
// throw e;
}catch(Exception e) {
e.printStackTrace();
if (!conn.getAutoCommit()) {
System.out.println("rollback transaction");
//回滚事务
conn.rollback();
}
if (e instanceof InvocationTargetException) {
InvocationTargetException ite = (InvocationTargetException)e;
throw ite.getTargetException();
}
throw new AppException("操作错误!");
}finally {
conn.setAutoCommit(true);
ConnectionManager.closeConnection();
}
return retValue;
}

}
分享到:
评论

相关推荐

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码)

    java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...

    spring-控制事物

    此外,Spring AOP的代理机制(如JDK动态代理或CGLIB代理)在声明式事务管理中的作用也是源码学习的重要部分。 至于“工具”,可能是指一些辅助工具或技术,如IDEA中的debug工具,可以帮助开发者在调试过程中观察...

    spring的5中事物配置 介绍spring的5中事物配置

    - **JDK动态代理**:在没有接口的情况下,Spring会创建一个实现了目标类所有接口的代理对象,然后在代理对象的方法调用前后插入事务处理代码。 - **CGLIB代理**:如果目标类实现了接口,Spring默认使用JDK动态代理...

    spring中事物配置

    在Spring中,AOP通过动态代理实现,可以是JDK动态代理或CGLIB动态代理,具体取决于目标对象是否实现了接口。对于声明式事务管理,Spring推荐使用基于接口的代理,因为这种方式更高效且更易于维护。 接下来,我们来...

    spring事物管理配置的5种方式

    主要有两种代理方式:基于接口的JDK动态代理和基于类的CGLIB代理。 接下来,我们将详细探讨五种事务管理配置方式: ### 第一种:每个Bean都有一个代理 在这种方式中,每个需要事务管理的Bean都会被一个事务代理...

    spring配置事物的5种方式

    3. **代理机制**:Spring通过代理机制实现事务控制,包括AOP(面向切面编程)代理和JDK动态代理。代理机制是决定事务策略的关键部分,它决定了事务如何在方法调用间传播。 接下来,我们将详述Spring配置事务的五种...

    spring事物的五种配制方法

    - **适用场景**:适合对事务有特殊需求的应用程序,例如需要在运行时动态调整事务配置。 3. **第四种方法:编程式事务管理**:通过手动编写代码来控制事务的开始、提交和回滚。适用于事务管理较为复杂的场景。 - ...

    neocities-proxy:Neocities 站点的代理服务器

    基于 node-spdy 和随机其他奇特事物的 Neocities 缓存代理服务器的开始。 repo 中的证书是自签名的,例如 example.org,NICE TRY DADE MURPHY。 我们开始推动 Nginx 超越它的能力,所以作为一个选项开始变得更有...

    Massive.Software.Learning.Tutorials

    该软件允许数字角色(即代理)自动对其感知到的事物做出反应,无需编程技能即可操作。它是一款全方位的产品,包含了一系列强大的功能模块,如骨骼设计、运动混合、刚体动力学、布料模拟等,并支持基于优化的...

    四级高频词汇

    22. vary:变化,改变 - 描述事物的多样性或动态性。 23. vanish:消灭,不见 - 表示消失或无法找到。 24. swallow:吞下,咽下 - 常用于描述吃喝动作。 25. suspicion:怀疑,疑心 - 对某事持有疑虑的状态。 26. ...

    programming in Object - C 2.0

    - **代理模式**:协议常用于实现代理设计模式,让对象间进行通信。 6. **Foundation框架** Foundation框架是Objective-C的基础,提供了诸如字符串、数组、字典等基本数据结构,以及事件处理、线程管理等功能。 7...

    浙江2018保险代理从业人员资格考试基础知识模拟考试题.doc

    2. 人力资源管理:古语“流水不腐,户枢不蠹”强调事物需要保持动态,对应在人力资源管理中,岗位轮换是一种体现这一理念的方法,因为它能促进员工的全面发展,避免工作僵化和技能单一。 3. 团体健康保险:团体健康...

    捕鱼java源码-awesome:github存储库的精选列表

    云原生高性能边缘/中间/服务代理 - Protocol Buffers - Google 的数据交换格式 - 新的 Windows 终端和原始的 Windows 控制台主机 - 都在同一个地方! CSS —— :popcorn: 一个跨浏览器的 CSS 动画库。 像一件简单的...

    使用模型识别的交互式动态影响图的有效解决方案

    I-DID中的主体不仅对环境的物理状态,而且对其他事物的模型也保持信念。 因此,随着时间的流逝,归因于其他代理的模型的指数增长使求解I-DID遭受损失。 以前解决I-ID的方法旨在通过比较候选模型的全部或部分策略树...

    stunning-nature-photos:实验性更“创意”的UI事物

    该项目是通过引导的。 您将在下面找到一些有关如何执行常见任务的信息。 您可以在找到本指南的最新版本。 目录 自动格式化代码 更改页面<title> 安装依赖项 ... 在服务器上生成动态<met

    Java web开发进阶

    - Java动态代理的相关资料 **2.6 软件工程基础** - **定义**: 软件开发的整个生命周期。 - **内容要点**: - 软件开发流程 - 软件开发规范 - 界面设计规范 - 软件项目管理 - **学习资源**: - UML官方网站提供...

    Objective-C基础教程pdf

    - **动态类型**:Objective-C支持动态类型,可以在运行时确定对象的类型。 3. **命名规则**:Objective-C遵循特定的命名约定,如首字母大写的类名和下划线分隔的属性名,这有助于代码的可读性。 4. **消息传递**...

    实用文档之软件开发应知应会-84分.pdf

    流量监控,流量监控通常是负载均衡器或反向代理服务器的职责。 28. 微服务挑战:微服务架构面临的主要挑战包括服务间的通信复杂性、分布式事务管理和服务发现等。 - 问题:“以下哪些是微服务面临的挑战?”答案是...

    2021-2022年收藏的精品资料什么是体系?什么是体系化?什么是公司体系化建设?.docx

    在这个过程中,公司追求的是一种动态平衡,即在无序和有序之间找到最佳状态,使各部门之间相互支持、互相补充,形成强大的组织合力。 【代理商公司体系化建设的基本架构】 1. 销售体系:销售是代理商公司的核心...

Global site tag (gtag.js) - Google Analytics