Bạn có thể đặt chúng trên giao diện nhưng hãy lưu ý rằng các giao dịch có thể không xảy ra trong một số trường hợp. Xem mẹo thứ hai trong Phần 10.5.6 của tài liệu Spring:
Spring khuyên bạn chỉ nên chú thích các lớp cụ thể (và các phương thức của các lớp cụ thể) với chú thích @Transactional, trái ngược với chú thích các giao diện. Bạn chắc chắn có thể đặt chú thích @Transactional trên một giao diện (hoặc một phương thức giao diện), nhưng điều này chỉ hoạt động như bạn mong đợi nếu bạn đang sử dụng proxy dựa trên giao diện. Thực tế là các chú thích Java không được kế thừa từ các giao diện có nghĩa là nếu bạn đang sử dụng proxy dựa trên lớp (proxy-target-class = "true") hoặc khía cạnh dựa trên dệt (mode = "khía cạnhj"), thì cài đặt giao dịch sẽ không được công nhận bởi cơ sở hạ tầng ủy quyền và dệt, và đối tượng sẽ không được bao bọc trong một ủy quyền giao dịch, điều này sẽ rất tệ.
Tôi khuyên bạn nên đưa chúng vào triển khai vì lý do này.
Ngoài ra, đối với tôi, các giao dịch dường như là một chi tiết triển khai vì vậy chúng phải nằm trong lớp thực thi. Hãy tưởng tượng có các triển khai trình bao bọc để ghi nhật ký hoặc triển khai thử nghiệm (mocks) mà không cần phải giao dịch.