带参数的 Spring 编程事务

Jam*_*mes 3 java spring hibernate transactions

我正在使用 Spring 研究一些数据访问逻辑,我的问题与事务有关。事务文档http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html显示您可以实现声明式或编程式事务。我选择使用编程方法,以便更好地控制交易内容。

基本模式如下所示:

Product product = new Product();
// load properties 

// how do I pass my product object instance to my anonymous method?   
transactionTemplate.execute(
      new TransactionCallbackWithoutResult() 
      {
       protected void doInTransactionWithoutResult (TransactionStatus status)
       {
        // transaction update logic here
        return;
       }}); 
Run Code Online (Sandbox Code Playgroud)

也许我的处理方式是错误的,但是我的问题是如何将参数传递到内部匿名方法中?我想这样做的原因是这样我可以在开始事务之前构建我的对象图(因为事务应该尽可能短地进行,对吗?)我只希望在事务中运行一小部分逻辑(更新逻辑)。

[编辑]

到目前为止,我唯一的选择似乎是使用常量变量,或者将所有逻辑放在匿名委托中。这似乎是一个非常常见的问题......您如何在自己的代码中处理这样的情况?

axt*_*avt 5

声明一下final吧 匿名内部类可以访问final局部变量:

public void someMethod() {
    ...
    final Product product = new Product();
    ...
    transactionTemplate.execute( 
        new TransactionCallbackWithoutResult()  
        { 
            protected void doInTransactionWithoutResult (TransactionStatus status) 
            { 
                doSomething(product);
                return; 
            }}); 
    ...
}
Run Code Online (Sandbox Code Playgroud)