miracleyao
V2EX  ›  问与答

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

  •  
  •   miracleyao · Nov 23, 2016 · 2861 views
    This topic created in 3482 days ago, the information mentioned may be changed or developed.

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

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

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

    3 replies    2016-11-23 23:38:28 +08:00
    uxstone
        1
    uxstone  
       Nov 23, 2016
    为何不用 spring?
    打算用 cglib 自己写?
    miracleyao
        2
    miracleyao  
    OP
       Nov 23, 2016
    @uxstone 为什么不利用 Spring 这么方便的框架,这是个历史遗留问题,就不去深究了。我们项目支持插件化,所以我打算写一个插件,利用 cglib 动态代理实现这个需求。
    slixurd
        3
    slixurd  
       Nov 23, 2016
    要么就 cglib/aspect 自己实现一个 aop
    要么就简单的通过 callback handler 的方式去调用那些方法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3003 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 07:10 · PVG 15:10 · LAX 00:10 · JFK 03:10
    ♥ Do have faith in what you're doing.