Dieser Artikel untersucht hauptsächlich die relevanten Inhalte der Ausführungsreihenfolge für die Ausführung der Springbohne wie folgt.
Quelle des Problems:
Es gibt eine Bohne, die A und eine Bohne, die B ist. Wenn A instanziiert ist, möchten Sie dem Rückgabewert von B. einen Eigenschaftsnamen zuweisen.
Wenn es nur in a geschrieben ist:
private B b;
private String name = b.funb();
Ein Fehler wird gemeldet und NullpointException ist darauf zurückzuführen, dass B zu diesem Zeitpunkt nicht eingerichtet wurde, also ist es null.
Die Lösung lautet wie folgt Code und lerne gleichzeitig die Ausführungsreihenfolge der Initialisierungsbekleidung, der Objektkonstruktion und init-Methode im Frühjahr.
öffentliche Klasse -A -Geräte initialisierungsbean {privat b b; privater String -Name; // = b.funb (); public void setb (b b) {System.out.println ("A.SetB initialisiert"); this.b = b;} public a () {System.out.println ("a initialed");} public void init () {System.out.println ("init"); this.name = b.funb ();}@override public String toString () {return super.toString () + this.name;} public void AfterPertieStieSet () löst eine Ausnahme aus {// in der Tat möglich, es hier // this.name = b.funb (); System.out.println ("AfterPropertieStEet");}} öffentliche Klasse B {public String funb () {system.out.println ("funB"); return "b.funb";} public b () {System.out.println ("B initialed");}}}}}}}}}}}}} {)Federkonfigurationsdatei
<beans default-autowire = "byname"> <bean id = "a" init-method = "init"> </bean> <bean id = "b"> </bean> </beans>
Testcode:
public static void main (String [] args) {applicationContext context = new FileSystemXMLApplicationContext ("src/testspring/bean.xml"); a = (a) context.getbean ("a");Die Programmausgabe lautet:
Ein initialed
B initialed
A.Setb initialed
Nachpropertie
init
Funk
[email protected]
Von hier aus können wir sehen, dass das Namensattribut von A von A erfolgreich auf den Rückgabewert der Funb -Methode von B festgelegt wird, wenn die Bean geladen wird. Der entscheidende Punkt besteht darin, Init-Methode zu verwenden, um es zu implementieren.
Die Ladereihenfolge kann auch als:
Erst Konstruktor -> dann B -Set -Methode -Injektion -> Initialisierungsbean After -PropertieStet -Methode -> Init -Method -Methode
Der folgende Inhalt wird aus dem Buch ausgehalten, aber ich fand, dass mein Verständnis für seinen Inhalt detaillierter sein wird!
1. Der Prozess der Federbaugruppe Bean
1. Instanziierung;
2. Setzen Sie den Attributwert;
3. Wenn die BeAnNameAWare -Schnittstelle implementiert ist, rufen Sie SetBeanname auf, um die Bean -ID oder den Namen festzulegen.
V.
5. Wenn ApplicationContextaware implementiert ist, rufen Sie setApplicationContext auf applicationContext fest
6. Rufen Sie die Vorinitialisierungsmethode von BeanPostProcessor an;
7. Rufen Sie die Methode nach der PropertieSt () zur Initialisierung an;
8. Rufen Sie die maßgeschneiderte Init-Method-Methode auf;
9. Rufen Sie die Post-Initialisierungsmethode von BeanPostProcessor an;
Federcontainer -Abschaltprozess
1. Rufen Sie die Einstiegsableerbean Destroy () an;
2. Rufen Sie die maßgeschneiderte Zerstörungsmethode an;
1. Einzelbohne
laden
1. Instanziierung;
2. Setzen Sie den Attributwert;
3. Wenn die BeAnNameAWare -Schnittstelle implementiert ist, rufen Sie SetBeanname auf, um die Bean -ID oder den Namen festzulegen.
V.
5. Wenn ApplicationContextaware implementiert ist, rufen Sie setApplicationContext auf applicationContext fest
6. Rufen Sie die Vorinitialisierungsmethode von BeanPostProcessor an;
7. Rufen Sie die Methode nach der PropertieSt () zur Initialisierung an;
8. Rufen Sie die maßgeschneiderte Init-Method-Methode auf;
9. Rufen Sie die Post-Initialisierungsmethode von BeanPostProcessor an;
Federbehälter schließen
1. Rufen Sie die Einstiegsableerbean Destroy () an;
2. Rufen Sie die maßgeschneiderte Zerstörungsmethode an;
2. Die Reihenfolge mehrerer Bohnen
Priorisieren Sie die Belastung von BeanPostProcessor -Implementierungsbohnen
In der Reihenfolge der Bohnendefinition ist die Reihenfolge des Ladens von Bohnen (auch wenn es beim Laden mehrerer Federdateien ID -Überschreiber gibt)
Wenn "Attributwert festlegen" (Schritt 2), wird bei der Begegnung mit REF die Bohne, die der ID von Ref entspricht, zuerst nach "Instanziierung" geladen (Schritt 1).
Die Unterklasse von AbstractFactoryBean ruft die Erstellungsmethode nach Schritt 6 auf, und dann wird die GetObjectype -Methode aufgerufen.
Die BeanfactoryUtils -Klasse ändert auch die Ladereihenfolge der Bohnen.
Das obige ist der gesamte Inhalt dieses Artikels über die Implementierungsreihenfolge des Ladens der Frühlingsbohnen, und ich hoffe, dass dies für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!