java应用程序执行的出口_Java:在作用域出口自动调用函数(如c析构函数)

对于

mysql连接,我有一个连接对象,并使用事务机制connection.startTransaction(),connection.commitTransaction(),connection.rollbackTransaction().

对于每个startTransaction(),必须始终调用commitTransaction()或rollbackTransaction().错过这样的电话或同时打电话都会破坏我的交易系统.

所以我用以下方式使用它们:

boolean i_am_in_a_transaction=true;

try {

connection.startTransaction();

...

i_am_in_a_transaction=false;

connection.commitTransaction();

} finally {

if(i_am_in_a_transaction) {

connection.rollbackTransaction();

}

}

这确保了声明的调用顺序,但这是很费力的,因为我必须在我使用事务的地方写这些行.

在C中我会使用一个事务对象来检查它的析构函数,如果调用了commit()函数,否则调用rollback():

class Transaction {

public:

Transaction()

:am_in_transaction(false) {

}

~Transaction() {

if(_am_in_transaction) {

rollback();

}

}

void startTransaction() {

_am_in_transaction=true;

...start Transaction...

}

void commit() {

_am_in_transaction=false;

...commit Transaction...

}

void rollback() {

_am_in_transaction=false;

...rollback Transaction...

}

private:

bool _am_in_transaction;

}

这样我就可以在一个地方实现逻辑,并且可以非常简单地使用它:

Transaction my_transaction;

my_transaction.startTransaction;

...

my_transaction.commit();

这个代码比上面的带有try / finally块的java代码简单得多.

有没有办法在java中实现这种行为而不将逻辑专用于调用者并使他实现try / finally块?

类似于在范围退出时自动调用函数的方法会对我有所帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值