0

我正在使用 guice 4.1 和持久扩展,并希望 @Transactional 能够工作,但事实并非如此。我关注了wiki并阅读了这篇文章,但无济于事:

在 JavaSE 中使用 Hibernate 和 Guice 管理事务

只是为了重新迭代......我正在做:

  1. 取决于 guice-persist
  2. 使用谷歌的@Transactional 注释
  3. 仅在由 guice 管理的公共或受保护方法上使用注释
  4. 启动 PersistService ...
4

1 回答 1

0

在我们当前的 Sprint 中升级我们的库时,我们遇到了类似的情况。我们所有失败的单元测试都与我们被注入的类有关,但没有绑定在模块中。

(这不是使用 Guice 4.0 的问题)。

如果我们绑定到接口或某些特殊要求,我们倾向于只绑定我们的类。因此,如果我们有一个简单的类,它有一个零参数构造函数或用@Inject 注释,我们不会将它绑定到模块中。

public class AA {

    public AA() {

    }

    @Transactional
    public void test() {
        System.out.println("" + getClass().getName());
    }
}

如果注入了 AA 类,调用 test() 将输出

package.test.AA$$EnhancerByGuice$$e2d19b62

升级到 Guice 4.1 后,输出为

package.test.AA

将以下内容添加到模块中会将注入更改回代理。@Transactional 使用 AOP 是如何工作的

bind(AA.class);
于 2017-08-15T06:29:20.100 回答