![](/img/trans.png)
[英]when calling private method from @transactional public method, will the same transaction be used in private method or no transaction used
[英]Java: calling public transactional method from a private method
我有兩節課
public class MyTest {
@Autowired
private MyService myService;
private void test() {
myService.writeToDb();
}
}
@Service
public class MyService {
@Transactional
public void writeToDb() {
// do db related stuff
}
}
我想知道從 MyTest 類調用方法 test() (這是一個私有方法)是否會創建一個事務。
附言
我正在使用 Spring Boot。 和 Java 17。
無論您是從您內部的公共方法還是私有方法調用另一個對象的方法,它都會起作用,這是一個實現細節。 從被調用者的角度來看,它是一樣的,它甚至不知道調用者的上下文。
Spring AOP 使用代理模式來處理這些場景。 這意味着您不是直接接收MyService
bean,而是MyServiceSpringCreatedProxy
(不是實際名稱,在調試模式下檢查,您會看到),它實際上是圍繞方法處理事務。
因此,只要調用通過 Spring 的代理, @Transactional
就會按預期計算。 請記住,這並不意味着新事務已打開,這取決於另一個事務是否已經存在以及您的配置。
但是,任何自調用(對公共或私有方法)都不會通過代理,然后@Transactional
將無法工作。
@Service
public class MyService {
// can be private, public or whatever
public void callRelatedStuff() {
//self call, no transactional work done
writeToDb();
}
@Transactional
public void writeToDb() {
// do db related stuff
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.