V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
miracleyao
V2EX  ›  问与答

在 Java 编程中如何不借助 Spring 等框架利用 AOP 思想实现事务?

  •  
  •   miracleyao · 2016-11-23 22:45:01 +08:00 · 2371 次点击
    这是一个创建于 2922 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:公司的一个项目的数据访问层是封装 JDBC 自己实现类似 MyBatis 的组件,然后提供 API 给业务层调用,项目是分布式的,并没有实现事务(单库的事务也没有),当然跨服务的事务我们也没好的解决方案,所以业务层很多代码无法做到数据一致性。

    问题:现在要求起码实现单库事务,改造了组件开放事务相关 API 给业务层,面临着所有业务层的方法都需要改代码,工程量有些大,现在基于单库事务,能不能在不改造业务层代码的情况下,实现事务呢?

    我想到的是利用 AOP 思想在每个方法调用前 openTransaction(),退出方法调用 commit(),抛出异常调用 rollback(),我们项目没用到 Spring 等框架,所以希望各位能给出不借助 Spring 等框架利用 AOP 思想实现事务的方案,多谢。

    3 条回复    2016-11-23 23:38:28 +08:00
    uxstone
        1
    uxstone  
       2016-11-23 22:48:31 +08:00
    为何不用 spring?
    打算用 cglib 自己写?
    miracleyao
        2
    miracleyao  
    OP
       2016-11-23 22:54:51 +08:00
    @uxstone 为什么不利用 Spring 这么方便的框架,这是个历史遗留问题,就不去深究了。我们项目支持插件化,所以我打算写一个插件,利用 cglib 动态代理实现这个需求。
    slixurd
        3
    slixurd  
       2016-11-23 23:38:28 +08:00
    要么就 cglib/aspect 自己实现一个 aop
    要么就简单的通过 callback handler 的方式去调用那些方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:05 · PVG 21:05 · LAX 05:05 · JFK 08:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.