Tôi muốn biết điều gì thực sự xảy ra khi bạn chú thích một phương thức với @Transactional
? Tất nhiên, tôi biết rằng Spring sẽ bao bọc phương thức đó trong một giao dịch.Mùa xuân - @Transactional - Điều gì xảy ra ở chế độ nền?
Nhưng, tôi có những nghi ngờ sau:
- Tôi nghe nói rằng mùa xuân sẽ tạo ra một lớp Proxy? Ai đó có thể giải thích điều này ở nhiều hơn độ sâu. Điều gì thực sự nằm trong lớp proxy đó? Điều gì sẽ xảy ra với lớp học thực tế? Và làm thế nào tôi có thể thấy được tạo ra lớp proxy Spring
- Tôi cũng đọc trong tài liệu Xuân rằng:
Lưu ý: Kể từ khi cơ chế này được dựa trên proxy, chỉ phương pháp 'bên ngoài' cuộc gọi đến trong thông qua proxy sẽ bị chặn. Điều này có nghĩa là 'tự viện dẫn', tức là một phương thức trong đối tượng đích gọi một số phương thức khác của đối tượng đích, sẽ không dẫn đến giao dịch thực sự trong thời gian chạy ngay cả khi phương thức được gọi được đánh dấu bằng
@Transactional
!
Nguồn: http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html
Tại sao cuộc gọi phương thức bên ngoài chỉ sẽ chịu giao dịch và không phải là phương pháp tự gọi?
Thảo luận có liên quan ở đây: http://stackoverflow.com/questions/3120143/where-should-i-put-transactional-annotation-at-an-interface-definition-or-at-an/3120323#3120323 –