Enthüllung der Transaktionsmagie von Spring
Das Annotieren von Methoden mit @Transactional veranlasst Spring, eine Proxy-Klasse zu erstellen, um eingehende Methodenaufrufe abzufangen. So funktioniert es:
Erstellung und Struktur einer Proxy-Klasse
Spring erstellt eine Proxy-Klasse, die dieselben Schnittstellen wie die annotierte Klasse implementiert. Die Proxy-Klasse ist eine dynamisch generierte Klasse, die die ursprüngliche Klasse umschließt. Innerhalb der Proxy-Klasse fügt Spring Code ein, um das Transaktionsverhalten zu handhaben, beispielsweise die Verwaltung des Lebenszyklus einer Transaktion.
Die tatsächliche Instanz der ursprünglichen Klasse ist nicht betroffen. Sie bleibt intakt, Methodenaufrufe an die ursprüngliche Klasse werden jedoch von der Proxy-Klasse abgefangen.
Sichtbarkeit der Proxy-Klasse
Die Proxy-Klasse ist zur Laufzeit normalerweise unsichtbar. Spring fängt Methodenaufrufe über den Proxy transparent ab, sodass es so aussieht, als würde die ursprüngliche Klasse aufgerufen. Sie können jedoch mithilfe von Tools wie Debugging-Tools oder AOP-Frameworks auf die Proxy-Klasse zugreifen.
Begrenzter Transaktionsbereich für interne Aufrufe
Die Transaktions-Proxys von Spring fangen nur eingehende Anrufe ab externe Quellen. Aufrufe innerhalb desselben Objekts, auch „Selbstaufruf“ genannt, werden nicht abgefangen. Dies liegt daran, dass solche Aufrufe den Proxy-Mechanismus umgehen.
Selbstaufruf-Problemumgehung
Um Transaktionsverhalten für Selbstaufrufmethoden zu aktivieren, können Sie eine Instanz des Proxys einfügen Klasse mithilfe eines BeanFactoryPostProcessor in die selbstreferenzierende Klasse umwandeln. Dadurch können Sie interne Aufrufe über den Proxy leiten und so den Transaktionsbereich auf Selbstaufrufmethoden erweitern.
Das obige ist der detaillierte Inhalt vonWie verwaltet die @Transactional-Annotation von Spring Transaktionen und handhabt den Selbstaufruf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!