C'è un'enorme differenza tra proxy e aspetti di codice byte. I proxy possono intercettare solo se l'invocazione proviene da "spazio esterno", ma non se l'invocazione proviene dall'oggetto stesso (this.transactionalMethod())
Ciò significa che se si dispone di una classe con due metodi, T e B Il metodo T
ha un'annotazione della transazione e il metodo B
invoca T
per “this.T()
", quindi il proxy non viene mai richiamato (per T
), in questo caso non viene gestita alcuna transazione!
Se si utilizza AspectJ il codice di gestione della transazione è weaven nel codice byte di T
e verrà eseguito indipendentemente dall'invocazione provenire dall'oggetto stesso o da un altro oggetto.
grazie mille per aver spiegato con parole chiare e semplici. –