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
Spring
In IOC
ist ein sehr wichtiges Konzept, dessen Essenz die Kartenstruktur, der Speichercontainer und die Business-Bean-Informationen sind. BeanFactory
Der FactoryBean
Unterschied zwischen und stellt jedoch einen sehr wichtigen Wissenspunkt dar. In diesem Artikel wird der Quellcode analysiert und erklärt.
Unterschied und Verbindung
Bohnenfabrik
Spring
In werden alle Bean
von BeanFactory
(d. h. dem IOC-Container) verwaltet. BeanFactory
Die 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
, XmlBeanFactory
und Schnittstellen, die zusätzliche Funktionen hinzufügen. BeanFactory
Das erstellte Bean
Objekt muss der folgenden Lebenszyklusform folgen, und Bean
die Produktion wird durch den Reflexionsmechanismus realisiert.
Auf Englisch Aware
bedeutet es Bewusstsein.Sie können sehen, dass BeanFactory
der Lebenszyklusprozess viele Aware
Schnittstellen umfasst:
Im Folgenden sind die folgenden Methoden in Bezug auf den BeanFactory
Schnittstellenlebenszyklus 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 Bean
Instanziierung jedoch sehr kompliziert sein und eine große Anzahl von Eigenschaften muss gemäß seinen Anforderungen Bean
konfiguriert werden.Zu diesem Zeitpunkt ist die Konfigurationsflexibilität vonFactoryBean
Bedarf, um Bean
Objekte zu erstellen, ohne Bean
dem Fluss des Lebenszyklus zu folgen . Spring
Es FactoryBean
bietet , die eine Reihe komplexer Details der Instanziierung verbergen und Anwendungen der oberen Schicht bequemer machen. Seit FactoryBean
Srping Generika unterstützt, d. h., die Schnittstellendeklaration wurde in FactoryBean<T>
die Form von geändert. In FactoryBean
der Anwendung von stellt SqlSessionFactoryBean
dies eine gute Praxis dar. Beim Betrieb der Datenbank stellt sie SqlSession
eine Factory
.
Zusammenfassen
BeanFactory
Stellt eine Spring-IOC-Containerspezifikation bereit, die eine Factory-Schnittstelle für Beans erstellen und verwalten kann. Aber es FactoryBean
ist 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.