Anda dapat meletakkannya di antarmuka tetapi diperingatkan bahwa transaksi mungkin tidak terjadi dalam beberapa kasus. Lihat tip kedua di Secion 10.5.6 dari Spring dokumen:
Spring merekomendasikan agar Anda hanya memberi anotasi kelas konkret (dan metode kelas konkret) dengan anotasi @Transactional, sebagai lawan dari antarmuka anotasi. Anda tentunya dapat menempatkan anotasi @Transactional pada sebuah antarmuka (atau metode antarmuka), tetapi ini hanya berfungsi seperti yang Anda harapkan jika Anda menggunakan proxy berbasis antarmuka. Fakta bahwa anotasi Java tidak diwarisi dari antarmuka berarti bahwa jika Anda menggunakan proxy berbasis kelas (proxy-target-class = "true") atau aspek berbasis tenun (mode = "aspectj"), maka pengaturan transaksinya adalah tidak dikenali oleh infrastruktur proksi dan tenun, dan objek tidak akan dibungkus dalam proksi transaksional, yang jelas-jelas buruk.
Saya akan merekomendasikan menempatkan mereka pada implementasi karena alasan ini.
Juga, bagi saya, transaksi tampak seperti detail implementasi sehingga seharusnya ada di kelas implementasi. Bayangkan memiliki implementasi wrapper untuk logging atau implementasi uji (tiruan) yang tidak perlu transaksional.