Spring-Kontext und Bean-Lifecycle-callbacks: praktische Beispiele der Nutzung
Ich habe ein wenig Erfahrung im Frühjahr. Und ich Frage mich, über die Anzahl der Rückrufe im Frühjahr Kontext/Bean-Lebenszyklus. Ich habe noch nie verwendet, und Sie können imaging-Situationen, in denen die meisten von Ihnen sind notwendig.
Meine Frage ist: können Sie für jeden Rückruf, mindestens ein Beispiel der Nutzung? Bedeutet Situationen, wenn Sie brauchen, dass callback.
Conext-Rückrufe:
Bean-Rückrufe:
P. S.:
Ist es für mich klar, wenn die Mehrheit der Rückrufe anrufen, oder was die eine oder andere Umsetzung von der Datei ApplicationContext wurde geschrieben für. Aber ich kann nicht herausfinden, warum jemand wollen, profitieren von diesem callback\Umsetzung. Zum Beispiel:
AbstractRefreshableApplicationContext
ist mit zu ändern bean-Konfigurationen Fliegen. Aber Warum? In die situation, die ich verändern wollen bean-Konfiguration auf Fliegen?afterPropertiesSet
Rückruf, offensichtlich wird aufgerufen, nachdem alle bean-properties sind gesetzt 🙂 Aber warum sollte ich darüber wissen, und wenn ich soll (darf), die es nutzen?
- Nehmen Sie jede dieser Schnittstellen, google mit dem Begriff
javadoc
und Blick auf die implementierende Klassen. - Aber ich Frage über den praktischen Situationen, wenn Leute begegnen, die mit diesen Rückrufen. Kann ich mich darauf verlassen, dass
javadoc
in einer solchen Frage? - Die javadoc erklärt, was die Schnittstelle ist für. Wenn Sie brauchen, dass, das ist, wenn Sie es verwenden. Für die non-interface-callbacks wieder, Sie sind ziemlich selbsterklärend (oder der Dokumentation).
init-method
für setupdestroy-method
für die Bereinigung, etc. - Nicht alle. Zum Beispiel, afterPropertySet(). Aber danke, ich werde durch die docs.
InitializingBean
sagtInterface to be implemented by beans that need to react once all their properties have been set by a BeanFactory
. Wenn Sie sich eine Menge von der Implementierung von Klassen, werden Sie feststellen, eine Menge von diesen auch umzusetzenFactoryBean
. Frühjahr wird der erste AnrufafterPropertiesSet
und rufen Sie danngetObject()
. Source code ist auch ein großartiger Ort zu suchen.- Delimanolis Von
javadoc
:AbstractRefreshableApplicationContext - implementation which are supposed to support multiple calls to refresh, creating a new internal bean factory instance every time.
So wie ich Sie verstehe, können wir neue definieren beans on-the-fly. Aber nochmal, ich habe nicht genug Erfahrung, um sich vorstellen, warum jemand wollen ändern-bean-definition-on-the-fly! Ich bin nicht askin, was hat die Implementierung ro callback tun, ich Frage nur, Wann(in welcher situation) kann jemand wollen, profitieren davon. - Delimanolis siehe P. S.-Abschnitt der Frage zu, bitte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die javadoc für jede der Schnittstellen, überprüfen die Implementierung von Klassen für Ihre Zwecke und schau in den source code für Ihre Umsetzung.
Eine typische bean-definition wäre
mit einer Klasse wie
Aber einige Male haben Sie Klassen, wo Sie brauchen, um eine gewisse Logik, basierend auf den Eigenschaften eingestellt
Diese Logik kann nur durchgeführt werden, nachdem die Eigenschaften festgelegt wurden. In diesem Fall können Sie Ihre Klasse implementieren, die
InitializingBean
- Schnittstelle (alte Schule)Oder kommentieren es mit
@PostConstruct
(neue Schule)Dies ist nur ein Beispiel. Die
InitializingBean
Schnittstelle wird Häufig verwendet, zusammen mit derFactoryBean
- Schnittstelle. Es hilft zu initialisieren, die Fabrik, bevor es erzeugt ein Objekt. Weitere Beispiel finden Sie in der javadoc von beiden Schnittstellen und schauen den Quelle-code, der verschiedene implementierende Klassen. Machen Sie dasselbe für die anderen*Aware
Schnittstellen.Als für
AbstractRefreshableApplicationContext
einige Male Sie brauchen, umrefresh()
IhreApplicationContext
. Dies kann passieren, weil Sie möchten, laden Sie eine XML-Konfiguration oder weil Ihre Umgebung sich verändert hat, aber Sie wollen nicht zu stoppen/neu starten Sie die Anwendung.1. BeanFactoryPostProcessor:
Gebe ich dieses Beispiel, da sehe ich diese Antwort: https://stackoverflow.com/a/2349891/4251461
Er zunächst wählten BeanFactory für die Verwendung in Integrations - /performance-tests, da Er nicht wollte, dass das laden der gesamten Anwendung für die Prüfung einer galvanisch Bohnen. Jedoch, Er glaube, BeanFactory nicht unterstützt classpath XML-Konfiguration. So BeanFactory und Datei ApplicationContext jeder von Ihnen eine entscheidende Funktion, die ich wollte, aber weder hat beide.
Er implementiert seine eigene Datei ApplicationContext die sich ClassPathXmlApplicationContext.
Hier konnte er BFPP anstelle des benutzerdefinierten Datei ApplicationContext.
Konfiguration in spring-container wie andere normale Bohnen:
Können Sie auch die Quelle der PropertyPlaceholderConfigurer und PropertyOverrideConfigurer im Frühjahr.
2. InitializingBean:
Als Sotirios Delimanolis sagte: Die InitializingBean Schnittstelle wird Häufig verwendet, zusammen mit der FactoryBean-Schnittstelle. Es hilft zu initialisieren, die Fabrik, bevor es erzeugt ein Objekt.
Ist hier ein Beispiel.
konfigurieren beans im spring container:
Testen:
Ausgabe:
digest-Nachricht:Hallo Welt!
Ergebnis: [B@19d02cb
digest-Nachricht:Hallo Welt!
Ergebnis: [B@1753b6d
Frühjahr Referenz sagt:
3. BeanPostProcessor:
Finden Sie zur Quelle des RequiredAnnotationBeanPostProcessor im Frühjahr.