文档章节

模拟spring实现将事务控制在service层

一个人眺望碧海和蓝天
 一个人眺望碧海和蓝天
发布于 2014/12/12 07:40
字数 195
阅读 49
收藏 0
public class TxProxy implements InvocationHandler {
private Object src;
private TxProxy(Object src){
this.src=src;
}
//参数为源对象
public static Object getProxy(Object obj) {
Object proxyObj = 
Proxy.newProxyInstance(TxProxy.class.getClassLoader(),
obj.getClass().getInterfaces(),new TxProxy(obj));
return proxyObj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(!method.isAnnotationPresent(Tx.class)){
return method.invoke(src, args);
}
Connection con = DataSourceUtils.getConnection();
Object oo = null;
try{
System.err.println("开事务。。。");
con.setAutoCommit(false);
oo = method.invoke(src, args);
System.err.println("提交。。。");
con.commit();
}catch(Exception e){
System.err.println("回滚。。。");
con.rollback();
throw e;
}finally{
con.close();
DataSourceUtils.remove();
}
return oo;
}
}

//自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface Tx {

}
//在service抽象一个接口

public interface IUTxProxyDomainService {

    // 增加 需要开事物@Tx
    @Tx
    public abstract void create();

    // 更新
    @Tx
    public abstract void update();

    // 读取
    public abstract void retrieve();

    // 删除
    @Tx
    public abstract void delete();

}

//servlet写法
    private IUTxProxyDomainService service = (IUTxProxyDomainService) TxProxy
            .factory(new TxProxyDomainService());


© 著作权归作者所有

共有 人打赏支持
一个人眺望碧海和蓝天
粉丝 2
博文 5
码字总数 1882
作品 0
太原
程序员
私信 提问
三分钟轻松了解Spring框架基础知识

做为一个合格的Java开发人员,你一定听说过Spring框架,虽然会应用,但却未必能够深入理解框架的原理,只是像其它人一样,泛泛的只是停留在理解的层面。小编会带着大家一步步了解Spring框架。...

爱尚实训
2018/07/22
0
0
在SSH框架中使用Spring的好处

在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。Struts是用来做应用层...

空_明
2013/03/06
0
0
spring在SSH框架中的作用

从网上了搜了下sring 在ssh中起的作用,在百度知道上看到下面的回答,觉得简单移动,记录下来备查,原文地址: http://zhidao.baidu.com/link?url=JiONrax-Flkpi5hqsg1HQOrMm1Dk8U1WT88l5T0...

北方攻城师
2014/08/02
0
0
SSH框架之Spring4专题4:Spring与DAO

本专题内容主要包含两部分:Spring所使用的操作数据库的技术之一,JDBC模版的使用;另一部分则为Spring对于事务的管理。 Spring与Dao部分,是Spring的两大核心技术loC与AOP的经典应用体现: ...

糖醋白糖
2018/06/26
0
0
Spring 容器(Spring 的上下文)

最近在做项目时牵扯到有关父子上下文的概念。 何为父子上下文呢? 父上下文: 使用listener监听器来加载配置文件,如下: Spring 会创建一个WebApplicationContext上下文,称为父上下文(父容...

666B
2014/06/22
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Linux下find、awk、sed、grep命令的例子

find:搜索工具 # 列出当前目录及子目录下所有文件和文件夹find .# 在/home目录下查找以.txt结尾的文件名,-i表示忽略大小写find /home -iname "*.txt" find命令的详细介绍 awk:数据快...

吴伟祥
36分钟前
1
0
flink的Async I/O 异常处理

异常 Async function call has timed out1.3+AsyncFunctionflink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/functions/async/AsyncFunction.java@Public......

stys35
47分钟前
2
0
sql plus入门

用sqlplus操作数据库的基本步骤: #su - oracle $sqlplus / as sysdba >!ps -ef|grep ora #查看oracle进程,看看oracle是否已经启动,如果未启动则使用下面这条语句启动. >startup #启动oracl...

突突突酱
今天
1
0
kettle10 利用java代码解压gz格式文件

kettle默认只能解压zip格式的文件,比如linux里的tar、gz等格式的文件需要用到java代码来解压 在java代码里引入需要的包,要返回的变量 java代码如下 import java.io.BufferedInputStream;...

wells杨
今天
2
0
Wince之旅——设备控制(重启网卡为例)

其实根据我的实践,在wince下面重启网卡其实十分简单,直接把驱动程序和网卡分离然后再绑定一次就好了。怎么绑定呢。就是一个函数DeviceIoControl和底层通信下。 方法1 :把第二个参数设为I...

rainbowcode
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部