我正在使用guice 4.1和持久扩展,并希望@Transactional可以工作,但事实并非如此。 我关注了维基并阅读了这篇文章,但无济于事:
使用 Hibernate 和 Guice 在 JavaSE 中管理事务
只是为了重申...我正在做:
- 取决于 guice-persist
- 使用谷歌的@Transactional注释
- 仅在由 GUICE 管理的公共或受保护方法上使用注释
- 正在启动持久服务...
我们在当前的 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
将以下内容添加到模块会将注入更改回代理。 这就是使用 AOP @Transactional的工作方式
bind(AA.class);