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

2016-11-23 22:45:01 +08:00
 miracleyao

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

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

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

2397 次点击
所在节点    问与答
3 条回复
uxstone
2016-11-23 22:48:31 +08:00
为何不用 spring?
打算用 cglib 自己写?
miracleyao
2016-11-23 22:54:51 +08:00
@uxstone 为什么不利用 Spring 这么方便的框架,这是个历史遗留问题,就不去深究了。我们项目支持插件化,所以我打算写一个插件,利用 cglib 动态代理实现这个需求。
slixurd
2016-11-23 23:38:28 +08:00
要么就 cglib/aspect 自己实现一个 aop
要么就简单的通过 callback handler 的方式去调用那些方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX