Der Unterschied zwischen Spring BeanFactory und FactoryBean

Machen Sie es sich zur Gewohnheit, gemeinsam zu schreiben! Dies ist der 4. Tag meiner Teilnahme an der „Nuggets Daily New Plan · April Update Challenge“, klicken Sie hier, um die Details der Veranstaltung anzuzeigen .

Der öffentliche Schießfalke befindet sich über dem hohen Turm, und es ist kein Nachteil, ihn zu bekommen.

Vorwort

SpringIn IOCist ein sehr wichtiges Konzept, dessen Essenz die Kartenstruktur, der Speichercontainer und die Business-Bean-Informationen sind. BeanFactoryDer FactoryBeanUnterschied zwischen und stellt jedoch einen sehr wichtigen Wissenspunkt dar. In diesem Artikel wird der Quellcode analysiert und erklärt.

Unterschied und Verbindung

Bohnenfabrik

SpringIn werden alle Beanvon BeanFactory(d. h. dem IOC-Container) verwaltet. BeanFactoryDie Grundform des Containers ist definiert, die grundlegende Schnittstelle und der Lebenszyklus des IOC-Containers sind spezifiziert, außerdem gibt es viele Implementierungsklassen für BeanFactory, wie ApplicationContext, DefaultListableBeanFactory, XmlBeanFactoryund Schnittstellen, die zusätzliche Funktionen hinzufügen. BeanFactoryDas erstellte BeanObjekt muss der folgenden Lebenszyklusform folgen, und Beandie Produktion wird durch den Reflexionsmechanismus realisiert.

Auf Englisch Awarebedeutet es Bewusstsein.Sie können sehen, dass BeanFactoryder Lebenszyklusprozess viele AwareSchnittstellen umfasst:

Implementierung von BeanFactory

Im Folgenden sind die folgenden Methoden in Bezug auf den BeanFactorySchnittstellenlebenszyklus aufgeführt, die in der Projektentwicklung weit verbreitet sind, ApplicationContextAware, undInitializingBean .DisposableBean

BeanNameAware.setBeanName 用于设置 Bean 的名称
BeanClassLoaderAware.setBeanClassLoader 设置类加载器
BeanFactoryAware.setBeanFactory 设置 bean 工厂
ResourceLoaderAware.setResourceLoader 设置资源加载器
ApplicationEventPublisherAware.setApplicationEventPublisher 设置事件发布器
MessageSourceAware.setMessageSource 设置信息资源
ApplicationContextAware.setApplicationContext 设置应用上下文
ServletContextAware.setServletContext 设置 Servlet 上下文
BeanPostProcessor.postProcessBeforeInitialization 前置处理器
InitializingBean.afterPropertiesSet Bean 初始化操作
RootBeanDefinition.getInitMethodName 设置Bean 的初始化方法名称
BeanPostProcessor.postProcessAfterInitialization 后置处理器
DisposableBean.destroy 设置 Bean 销毁
RootBeanDefinition.getDestroyMethodName 获取 Bean 销毁的方法
复制代码

Wenn Sie die getBean-Methode direkt aufrufen, gibt sie standardmäßig ein werkseitig erstelltes Objekt zurück.Wenn Sie das Bean selbst erhalten möchten, müssen Sie das &-Symbol als Präfix für die Verarbeitung hinzufügen.

FactoryBean

In einigen spezifischen Fällen wird der Vorgang der BeanInstanziierung jedoch sehr kompliziert sein und eine große Anzahl von Eigenschaften muss gemäß seinen Anforderungen Beankonfiguriert werden.Zu diesem Zeitpunkt ist die Konfigurationsflexibilität vonFactoryBean Bedarf, um BeanObjekte zu erstellen, ohne Beandem Fluss des Lebenszyklus zu folgen . SpringEs FactoryBeanbietet , die eine Reihe komplexer Details der Instanziierung verbergen und Anwendungen der oberen Schicht bequemer machen. Seit FactoryBeanSrping Generika unterstützt, d. h., die Schnittstellendeklaration wurde in FactoryBean<T>die Form von geändert. In FactoryBeander Anwendung von stellt SqlSessionFactoryBeandies eine gute Praxis dar. Beim Betrieb der Datenbank stellt sie SqlSessioneine Factory.

Zusammenfassen

BeanFactoryStellt eine Spring-IOC-Containerspezifikation bereit, die eine Factory-Schnittstelle für Beans erstellen und verwalten kann. Aber es FactoryBeanist eine spezielle Art der Bean-Erstellung, die nicht der Spezifikation des IOC-Containers folgen muss, sondern eine Erweiterung der Bean. Für die Erstellung und Verwendung komplexer Bean-Objekte kann es die Erstellungsdetails des Objekts einkapseln.

Ich denke du magst

Origin juejin.im/post/7082620724443086855
Empfohlen
Rangfolge