@Service
public class SomeService {
@Transactional
public void doSomeLogic() {
// some logic
doOtherThings();
// some logic
}
@Transactional(Transactional.TxType.REQUIRES_NEW)
private void doOtherThings() {
// some logic
}
为了得到这个问题的答案,您需要知道代理是如何工作的。
当您在bean中注释一个方法时,代理将用适当的逻辑包装该bean。这意味着,如果调用bean的带注释的方法,请求将首先发送到代理对象(命名为$),然后代理对象调用bean的方法。如果这个方法调用同一个bean的另一个方法,它将调用它而不调用具有事务管理逻辑的代理。
示例:下面是将由代理包装的代码及其工作的适当图表。
@Service
public class SomeService {
@Transactional
public void foo() {
// this next method invocation is a direct call on the 'this' reference
bar();
}
@Transactional(Transactional.TxType.REQUIRES_NEW)
public void bar() {
// some logic...
}
}
问题内容: 我们有: MyInterface有一个方法:。 当go()执行时,我们开始一个新的事务,该事务在方法完成时进行提交/回滚-很好。 现在,在go()中,我们在MyClass中调用了具有的私有方法。看来Spring会“忽略” REQUIRES_NEW批注,并且不会启动新的事务。我相信这是因为Spring AOP在接口级别(MyInterface)上运行,并且不会拦截对MyClass方法的任
问题内容: 从同一bean的另一个方法调用缓存的方法时,Spring缓存不起作用。 这是一个示例,可以清楚地说明我的问题。 组态: 缓存的服务: 结果: 该方法调用使用缓存在第二次调用预期。但是,在类中()中调用该方法时,则未使用Cache。 这是Spring缓存的工作方式还是我缺少什么? 问题答案: 我相信这是这样的。从我记得阅读的内容来看,生成了一个代理类,该代理类可以拦截所有请求并使用缓存的
我有一个应用程序的屏幕小部件。单击此小部件时,会打开“DeveloperMode”设置。但在一些设备上,应用程序因以下消息而崩溃。 引起:android.util.AndroidRuntimeExcture:从活动上下文外部调用starActive()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗? 我曾尝试使用addFlags和setFlags添加这一行,但仍然存在相同
问题内容: 如果一个同步方法调用另一个同步方法,那么线程安全吗? 问题答案: 是的,将方法标记为时,您实际上是在这样做: 当线程调用从method1进入method2时,它将确保它持有对的锁定,该锁定已经存在,然后可以通过。 当线程直接进入method1或method2时,它将阻塞直到获得锁(),然后进入。 正如詹姆斯·布莱克(James Black)在评论中指出的那样,您必须了解方法主体内部的操
我有一个注册了ActionListener的JTextField。当这个JTextField有焦点时,按下enter键,就会创建一个ActionEvent。 如何将此事件链接到另一个组件ActionListener(如JButton),以便运行其代码?
我的车型带有bean验证 汽车服务 } 当我从控制器Valid调用addCar时工作正常,但是当我从同一个服务类中的方法调用它时,它不验证汽车模型。 我从控制器调用addCars 这个怎么解决?我应该做些什么来使它工作呢?我必须对代码进行哪些更改?