Spring bietet Entwicklern viele Postprozessoren, wie BeanpostProcessor, BeanfactoryPostProcessor, BeanvalidationPostProcessor und andere Postprozessoren. Die meisten ihrer Nutzungsmethoden sind ähnlich. Verstehe einen von ihnen und beherrsche ihre Nutzungsmethoden, und die anderen können durch Analogie verstanden werden.
Hier verwenden wir BeanPostProcessor als Beispiel, um zu zeigen, wie es verwendet wird.
Die BeanPostProcessor -Schnittstelle bietet Entwicklern zwei Methoden zum Anpassen: Postprozessbeeritialisierung und Postprozessafteritialisierung.
PostProcessBeforeinitialisierung: Diese Methode dient hauptsächlich für Spring, um den Prozess anzupassen, bevor die Initialisierungsmethode aufgerufen wird, wenn Bean initialisiert wird.
Postprozessafteritialisierung: Diese Methode dient hauptsächlich für Spring, um den Prozess nach dem Aufrufen der Initialisierungsmethode bei Bean -Initialisierung anzupassen.
Beispielcode:
/** * test bean */public class cat {private String name; privates int Alter; public void say () {System.out.println ("Name:" + Name); System.out.println ("Alter:" + Alter); } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int getage () {return ay; } public void setage (int age) {this.age = älter; }} /*** benutzerdefinierte Postprozessor*/öffentliche Klasse CatbeanPostPostProcessor implementiert BeanPostProcessor {@nullable @Override Public Object postprozessbeForeinitialisierung (Objektbean, String beanname) löscht BeanSexception {if (bean instanceof cat) {// ursprüngliche Attribut Cat = (cat) (cat) (cat = (cat) (cat) (cat) (cat = (cat) (cat = (cat) (cat = (cat) ban; cat.say (); Rückzahlung; } zurückbean; } @Nullable @Override öffentliches Objekt postProcessAfterInitialisierung (Objektbean, String Beanname) löst BeanSexception aus {if (Beaninstanz von cat) {// Änderung des Attributwerts und return cat = (cat) bean; Cat.SetName ("Hallo Maomi"); Cat.Setage (3); Katze zurückkehren; } zurückbean; }} /** * run */public class run {public static void main (String [] args) {applicationContext applicationContext = new classPathXMLApplicationContext ("Spring-bean.xml"); Cat Cat = (Cat) applicationContext.getbean ("cat"); cat.say (); }}XML -Konfigurationsinformationen
<!-Bean und initialisieren-> <bean id = "cat"> <Eigenschaft name = "name" value = "hellokitty" /> <Eigenschaft name = "Alter" value = "1" /> < /bean> <bean id = "catbeanPostProcessor" />
Ausgangsergebnis:
Name: Hellokitty
Alter: 1
Name: Hallo Maomi
Alter: 3
Sie können sehen, dass sich die im Postprozessor verarbeiteten Bean -Informationen geändert haben. Schauen wir uns schließlich an, wie Sie benutzerdefinierte Implementierungen im Quellcode aufrufen.
In der Initialisierungs -Bean -Methode: AbstractAutoWirecapelableBeArtory.java
/** * Initialisierungsbean */Protected Object InitializeBean (endgültiger String -Beanname, endgültige Objektbean, @Nulable RootbeanDeFinition mbd) {// Teil des irrelevanten Codeobjekts Wrapedbean = Bean; // vor der Initialisierung if (mbd == null ||! } try {// Die Initialisierungsmethode zum Initialisieren von Bean InvokeInitMethods (Beanname, Wrackedbean, MBD); } catch (throwable ex) {neue beancreationException ((mbd! = null? } // if (mbd == null ||! } return WrapedBean; } // Die postprozessbeForeinitialisierungsmethode ruft @Override öffentliches Objekt applyBeanPostProcessorsBeforeinitialisierung auf (Objekt vorhandener, String beanname) löscht Beansexception {Object ergebnis = vorhandene Bean; für (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// Aufrufen der benutzerdefinierten postprozessbeeritialisierungsmethode Objekt aktuell if (current == null) {return Ergebnis; } Ergebnis = Strom; } Rückgabeergebnis; } // PostprozessAfterInitialisierungsmethode @Override öffentliches Objekt anwendenbeanpostProcessorsAfterInitialization (Objekt vorhandene Bean, String beanname) löscht Beansexception {Object ergebnis = vorhandene Bean; Für (BeanPostProcessor BeanProcessor: getBeanPostProcessors ()) {// benutzerdefinierte Postprozessafterinitialisierungsmethode Objekt aktuell = BeanProcessor.PostProcessafterinitialisierung (Ergebnis, Beanname); if (current == null) {return Ergebnis; } Ergebnis = Strom; } Rückgabeergebnis; }Das obige ist der aufrufende Springprozess, um benutzerdefinierte Methoden zu implementieren. Ich hoffe, es wird für das Lernen aller hilfreich sein, und ich hoffe, jeder wird Wulin.com mehr unterstützen.