Le printemps recommandation est que vous annoter les des implémentations concrètes au lieu d'une interface. Il n'est pas incorrect d'utiliser l'annotation sur une interface, il est juste possible de la mauvaise utilisation de la fonctionnalité et par inadvertance, de contourner votre @Transaction déclaration.
Si vous avez marqué quelque chose transactionnelle dans une interface, puis reportez-vous à l'un de ses mise en œuvre de classes ailleurs dans le printemps, c'est pas tout à fait évident que l'objet qui ressort crée de ne pas respecter les @Transactional annotation.
Dans la pratique, il ressemble à quelque chose comme ceci:
public class MyClass implements MyInterface {
private int x;
public void doSomethingNonTx() {}
@Transactional
public void toSomethingTx() {}
}