Von Frühling Referenz docDoes Frühling @transaction Arbeit an einem konkreten Verfahren der abstrakten Klasse
Frühling empfiehlt, nur konkrete Klassen (und Methoden der konkreten Klassen) mit der @Transactional Anmerkung Anmerkungen versehen, im Gegensatz zu annotieren Schnittstellen. Sie können die Annotation @Transactional auf eine Schnittstelle (oder eine Interface-Methode) setzen, aber das funktioniert nur so, wie Sie es erwarten würden, wenn Sie Interface-basierte Proxies verwenden. Die Tatsache, dass Java Annotationen nicht von Interfaces geerbt werden, bedeutet, dass Sie, wenn Sie klassenbasierte Proxys (proxy-target-class = "true") oder webbasierte Aspekte (mode = "aspectj") verwenden, die Transaktionseinstellungen verwenden werden von der Proxy- und Web-Infrastruktur nicht erkannt und das Objekt wird nicht in einen Transaktions-Proxy eingebettet, was ausgesprochen schlecht wäre.
Obwohl es sich nur um Interfaces handelt, werden abstrakte Klassen ebenfalls als nicht konkret angesehen.
Also, wenn ich habe eine abstrakte Klasse
public abstract class BaseService{
//here is a concrete method
@Transactional
public void updateData{
//do stuff using dao layer
}
und eine konkrete Klasse, die die Klasse Jetzt
public class SpecialService extends BaseService{
//body of class
}
erstreckt, wenn ich specialService.updateData()
von meiner Controller-Klasse nenne es transaktionale sein?
Was passiert, wenn Sie versuchen? –