有人可以解释一下为什么这会起作用吗:
@Transactional
@Test
public void test() {
save();
}
public void save() {
Scenario scenar = new Scenario();
sessionFactory.getCurrentSession().save(scenar);
}
这不会,因为它找不到交易:
@Test
public void test() {
save();
}
@Transactional
public void save() {
Scenario scenar = new Scenario();
sessionFactory.getCurrentSession().save(scenar);
}
谢谢!
最佳答案
Spring @Transactional 注释使用 Spring AOP 工作。这意味着,当包含带有该注释的方法的 bean 作为不同 bean 的依赖项注入(inject)时,它会被包装在代理中。该代理具有与 bean 相同的接口(interface),但在调用方法之前执行附加操作(在本例中将其包装在事务中)。您可以将其视为一种 decorator 。您甚至可以在调试应用程序时看到正在调用的代理。
现在,当从同一个类调用使用 @Transactional 注释的方法时,没有(至少没有简单的)方法来注入(inject)代理。只是没有办法替换 Java 中“this”关键字引用的对象。
关于spring - 在哪里可以使用@Transactional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323536/