我正在开发一个广泛使用旧式 jdbc SQL 操作(即 SELECT、UPDATE、INSERT 等)的现有应用程序。
该应用程序有一个管理数据字段的类,带有一个脏标志以指示某些内容已更改并且需要提交到数据库。
当 INSERT 或 UPDATE 语句无异常完成并且提交成功时,需要关闭“脏标志”。
由于当前的设计和程序流程的原因,这并不是完全无关紧要的,所以,我认为可以实现一个用于将更改写入数据库的 Connection 的代理,覆盖 commit 方法并确保当 commit成功,标志设置为关闭。
换句话说,我想实际上实现一个基于 java 的数据库提交“回调”,以便我可以订阅特定连接的提交,并对这些事件采取行动。
我正在研究 byte-buddy 作为实现这一目标的一种可能方式,但在我迄今为止看到的所有示例中,都可以控制正在修改的类的实例化。
我的情况并非如此。实现 java.sql.Connection 的类型的实例由 jdbc 驱动程序创建,通常由数据库连接池(例如 TomCat 连接池)中使用的另一个类包装。
如何拦截这些对象的实例化,并动态覆盖提交和回滚方法?
我可以用字节伙伴来做吗?
有更好的选择吗?