BeanFactoryPostProcessor und BeanPostProcessor in der lifecycle-events
Ich versuche zu verstehen, was der Unterschied zwischen BeanFactoryPostProcessor
und BeanPostProcessor
.
Habe ich verstanden, dass BeanFactoryPostProcessor
arbeitet auf bean-definition, D. H. bevor die bean-Instanz wird immer erstellt, wird Sie ausgeführt und BeanPostProcessor
wird ausgeführt, wenn die bean instanziiert wird und Lebenszyklus-Ereignisse genannt werden.
Bedeutet dies BeanFactoryPostProcessor
ist nicht ein Teil der Feder-lifecycle-events, wie es genannt wird, bevor die Instanziierung während BeanPostProcessor
ist der Teil der Feder-lifecycle-events? Freundlicherweise überprüfen, ob mein Verständnis richtig ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
BeanFactoryPostProcessor
ist eine Schnittstelle und Bohnen, die umzusetzen sind tatsächlich Bohnen, die Unterziehen die Frühjahr-Lebenszyklus (Beispiel unten), aber diese Bohnen nicht, nehmen Sie Teil an den anderen deklarierten beans Lebenszyklus.Die Unterschiede über
BeanFactoryPostProcessor
undBeanPostProcessor
:BeanFactoryPostProcessor
wird aufgerufen, wenn alle bean-Definitionen wurden geladen, aber keine Bohnen haben instanziiert wurde noch. Dies ermöglicht das überschreiben oder hinzufügen von Eigenschaften, die sogar zu eifrig-Initialisierung der beans. Dies wird Ihnen ermöglichen, haben Zugriff auf alle Bohnen, die Sie in XML definiert oder kommentiert (gescannt via component-scan).BeanPostProcessor
operieren bean (oder Objekt -) Instanzen, was bedeutet, dass, wenn der Spring IoC container instanziiert eine bean-Instanz dann BeanPostProcessor Schnittstellen Ihre Arbeit tun.BeanFactoryPostProcessor
Implementierungen sind "berufen" beim Start des Spring-Kontext nachdem alle bean-Definitionen wurden geladen, währendBeanPostProcessor
sind "berufen", wenn der Spring IoC container instanziiert eine Bohne (also während des Startvorgangs für alle singleton-und on-demand für den proptotypes ein)ConfigurableListableBeanFactory beanFactory
innerhalb derpostProcessBeanFactory
Methode können Sie den Zugriff auf die bean-definition und seinen Eigenschaften durchbeanFactory.getBeanDefinition("yourBeanName").getPropertyValues()
und dann Sie können hinzufügen oder ändern Sie Sie.beanFactory.getBeanDefinition("yourBeanName")
ermöglicht den Zugriff auf die bean-definition und nicht eine Instanz der bean, so dass, wenn Sie interagieren nur mit der definition der bean (name der bean, die Klasse instantiieren, die Eigenschaften zu injizieren, Abhängigkeiten...) keine Bohnen erstellt werden. Jedoch, wenn Sie die Interaktion mit der Instanz der Bohnen, es wird einem sofort und ohne Umweg über das normale bean-Erstellung.BeanPostProcessor
pro Anwendung Kontext ?Hier ist ein Fluss-Diagramm, das könnte helfen zu verstehen, die spring-bean-Initialisierung Lebenszyklus.
Als wir sehen können, ist die Umsetzung von theBeanFactoryPostProcessor ausgeführt wird, bevor ein spring-bean-Instanziierung, im Gegensatz zu den BeanPostprocessor, wo der implementierten Methode wird nur ausgeführt, wenn die bean instanziiert wird.
Die Quelle Bild ist vom Frühjahr 5 Design Patterns Buch.
Wähle ich die Erklärung aus dem Buch:
Den
BeanFactoryPostProcessor
wird ausgeführt, bevor beanObject
Instanziierung (dh an der ZeitApplicationcontext
container initialisiert)BeanPostprocessor
wird ausgeführt, wenn die bean-Objekt erstellt wurde, kann es ausgeführt werden, bevorinit()
und nachinit()
.