Die Initialisierungsschnittstelle bietet eine Möglichkeit, Methoden für Beans zu initialisieren. Es enthält nur die Nachpropertie -Methode. Jede Klasse, die die Schnittstelle erbt, führt die Methode bei der Initialisierung der Bean aus.
Wie folgt getestet:
import org.springframework.beans.factory.initializingBean; öffentliche Klasse testinitializingBean -Geräte initialisierungsbean {@Override public void AfterProperTieStieSet () Ausnahme {System.out.println ("ceshi initializingBean"); } public void testinit () {System.out.println ("ceshi init-method"); }}Konfigurationsdatei
<bean id = "testinitializingBean"> </bean>
Die Hauptfunktion ist wie folgt
public class main {public static void main (string [] args) {applicationContext context = new FileSystemXMLApplicationContext ("/src/main/java/com/beans.xml"); }}Die Testergebnisse sind:
Ceshi Initialisierungsbean
Dies bedeutet, dass bei der Initialisierung der Bohnen die Bean der Initialisierungs -Grenzfläche initialisierungsbean implementiert wird, wird die NachpropertieStet -Methode automatisch aufgerufen.
Das Problem ist also, dass Sie beim Konfigurieren von Bohnen auch die Initialisierungsmethode für die Bean mithilfe der Init-Methode-Konfiguration konfigurieren können. Welcher dieser beiden wird zuerst ausgeführt? Testen Sie es als Nächstes, ändern Sie die Konfigurationsdatei und fügen Sie init-Methoden hinzu:
<bean id = "testinitializingBean" init-method = "testinit"> </bean>
Führen Sie das Programm aus und erhalten Sie das Ergebnis:
Ceshi Initialisierungsbean
Ceshi init-Method
Aus den Ergebnissen können wir erkennen, dass beim Implementieren der Initialisierungsschnittstelle bei der Initialisierung der Bean die Initialisierungsschnittstelle das Init-Methode in der Konfigurationsdatei angibt, ruft das System zunächst die Methode AfterPropertieset () auf und dann die im Init-Methoden angegebene Methode.
Wie wird diese Methode im Frühjahr implementiert? Wenn Sie sich die Quellcodeklasse der Frühlingsladenbohnen ansehen, können Sie das Rätsel sehen. Die InvokeInitMethods in der abstraktautowiredCapableBeAnfactory -Klasse sind wie folgt sehr klar:
Protected Void InvokeInitMethods (String -Beanname, endgültige Objektbean, RootbeanDefinition MBD) löst Throwable {// beurteilen, ob die Bean die Initialisierungsschnittstelle implementiert hat. Wenn die Initialisierungs -Schnittstelle implementiert ist, wird nur die NachpropertieStet -Methode der Bean als boolean isinitializingBean = (Bean -Instanz der Initialisierungsbean) bezeichnet. if (isInitializingBean && (mbd == null ||! } if (system.getSecurityManager ()! } catch (privilegedActionException pae) {throw pae.getException (); }} else {// rufen Sie direkt nach PropertieStieSet ((initializingBean) bean) .afterProperTieStieSet (); }}} if (mbd! // Unterscheiden Sie, ob die Init-Method-Methode angegeben ist. Wenn die Init-Method-Methode angegeben ist, dann ist der etablierte Init-Methode if (initMethodname! = Null &&! Die Init-Method-Methode besteht darin, InvokeCustominitMethod (Beanname, Bean, MBD) zu implementieren; }}}Zusammenfassen:
1. Spring bietet Bohnen zwei Möglichkeiten zur Initialisierung von Bohnen, implementieren Sie die Initialisierungs-Schnittstelle, implementieren Sie die NachpropertieStet-Methode oder geben Sie sie über Init-Methode in der Konfigurationsdatei an. Beide Methoden können gleichzeitig verwendet werden.
2. Implementieren der Initialisierungs-Schnittstelle ruft direkt die NacherpropertieStet-Methode auf, die etwas effizienter ist als die durch Init-Methoden durch Reflexion angegebene Methode, aber die Init-Method-Methode beseitigt die Abhängigkeit von der Feder.
3. Wenn ein Fehler beim Aufrufen der NachpropertieStet-Methode auftritt, wird die durch Init-Method angegebene Methode nicht aufgerufen.
Die Rolle der Frühlingsinitialisierungsbean
Die Initialisierungsoberfläche von Spring ist sehr nützlich. Es befindet sich in Frühlingsbohnen. Es liefert nur eine Methode nach PropertieStieSt (). Wenn Sie diese Methode implementieren, bietet Spring Ihnen Unterstützung auf Framework-Ebene: Wenn Sie eine Instanz der Klasse erstellen, die die Schnittstelle über den Sring-Container implementiert, wird die Methode After PropertieStet aufgerufen. Mit dieser Methode können Sie überprüfen, ob Ihre Bean korrekt initialisiert wird. Natürlich können Sie auch die Init-Method-Methode verwenden. Diese beiden Methoden können gleichzeitig angewendet werden, und die Reihenfolge der Anrufe ist init-Methode.
Zusammenfassen
Das oben oben ist die Verwendung der initialisierungsbekischen Schnittstelle in Spring, die Ihnen vom Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!