2010-11-11 40 views
12

Tôi đang thiết lập một dự án JPA + Spring mới.Mùa xuân: Trình quản lý giao dịch theo chú thích

<tx:annotation-driven transaction-manager="transactionManager" /> 

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 

trong applicationContext.xml của tôi: sự khác biệt (đối với tôi như một lập trình viên) giữa là gì?

Trả lời

28

Có sự khác biệt lớn giữa các khía cạnh proxy và mã byte. Proxy chỉ có thể chặn nếu lời gọi đến từ “không gian bên ngoài”, nhưng không phải nếu lời gọi đến từ chính đối tượng đó (this.transactionalMethod())

Điều này có nghĩa là nếu bạn có một Lớp với hai phương pháp, T và B Phương pháp T có chú thích giao dịch và phương thức B gọi T theo số “this.T() ”, sau đó proxy không bao giờ được gọi (đối với T) để không xử lý giao dịch trong trường hợp này!

Nếu bạn sử dụng AspectJ mã xử lý giao dịch được mã hóa trong mã byte của T và sẽ được thực thi bất kể lời gọi đến từ chính đối tượng đó hoặc từ một đối tượng khác.

+0

cảm ơn bạn rất nhiều vì đã giải thích bằng những từ đơn giản và rõ ràng. –

6

The docs nói:

chế độ "proxy" quá trình

Giá trị mặc định chú thích đậu được proxy sử dụng framework AOP Spring (sau ngữ nghĩa proxy, như đã trình bày ở trên, việc áp dụng phương pháp gọi đến trong thông qua proxy chỉ). Thay vào đó, chế độ thay thế "aspectj" thay thế các lớp bị ảnh hưởng với khía cạnh giao dịch AspectJ của Spring, sửa đổi mã byte lớp đích để áp dụng cho bất kỳ kiểu gọi phương thức nào. Dệt AspectJ yêu cầu spring-aspect.jar trong đường dẫn lớp cũng như thời gian tải dệt (hoặc thời gian biên dịch) được bật. (Xem Mục 7.8.4.5, “Cấu hình lò xo” để biết chi tiết về cách thiết lập thời gian tải dệt.)

Không quan trọng (từ góc nhìn của nhà phát triển) chế độ nào sẽ được sử dụng.

+0

oh cảm ơn. vì một lý do nào đó tôi không thể tìm thấy thông tin này. –

Các vấn đề liên quan