您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring BeanFactory與FactoryBean的區(qū)別是什么的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Spring BeanFactory與FactoryBean的區(qū)別是什么文章都會有所收獲,下面我們一起來看看吧。
前言:
在 Spring
中, IOC
是很重要的概念,其本質(zhì)就是 map 結(jié)構(gòu),存儲容器和業(yè)務(wù) Bean 信息。但是 BeanFactory
和 FactoryBean
的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進(jìn)行分析講解。
在 Spring
中,所有的 Bean
都是由 BeanFactory
(也就是 IOC 容器)來進(jìn)行管理的。BeanFactory
定義了容器的基本形式,并規(guī)定了 IOC 容器的基本接口以及生命周期,針對 BeanFactory 的實現(xiàn)類也有很多,比如ApplicationContext
、DefaultListableBeanFactory
、XmlBeanFactory
都是其添加了附加功能的接口。BeanFactory
創(chuàng)建的 Bean
對象需要遵循以下的生命周期形式,并且 Bean
的生產(chǎn)都是通過反射機制來實現(xiàn)的。
在英文中,Aware
是意識的意思,可以看到 BeanFactory
的生命周期流程包含了諸多的 Aware
接口:
以下為 BeanFactory
接口生命周期相關(guān)的一下方法,在項目開發(fā)中,ApplicationContextAware
、InitializingBean
和 DisposableBean
有這廣泛的應(yīng)用。
BeanNameAware.setBeanName 用于設(shè)置 Bean 的名稱
BeanClassLoaderAware.setBeanClassLoader 設(shè)置類加載器
BeanFactoryAware.setBeanFactory 設(shè)置 bean 工廠
ResourceLoaderAware.setResourceLoader 設(shè)置資源加載器
ApplicationEventPublisherAware.setApplicationEventPublisher 設(shè)置事件發(fā)布器
MessageSourceAware.setMessageSource 設(shè)置信息資源
ApplicationContextAware.setApplicationContext 設(shè)置應(yīng)用上下文
ServletContextAware.setServletContext 設(shè)置 Servlet 上下文
BeanPostProcessor.postProcessBeforeInitialization 前置處理器
InitializingBean.afterPropertiesSet Bean 初始化操作
RootBeanDefinition.getInitMethodName 設(shè)置Bean 的初始化方法名稱
BeanPostProcessor.postProcessAfterInitialization 后置處理器
DisposableBean.destroy 設(shè)置 Bean 銷毀
RootBeanDefinition.getDestroyMethodName 獲取 Bean 銷毀的方法
默認(rèn)情況下,如果直接調(diào)用 getBean 方法,將會返回一個工廠創(chuàng)造的對象,如果想獲取 Bean 本身,那么需要添加 & 符號作為前綴進(jìn)行處理。
但是在某些具體的情況下,實例化 Bean
的操作會很復(fù)雜,按照其要求需要配置大量的屬性,此時 Bean
的配置靈活性就受到了限制,此時就需要使用到 FactoryBean
了,該接口可以按照用戶的需求來構(gòu)造 Bean
對象,而不再遵守 Bean
生命周期的流程。Spring
自身就提供了很多 FactoryBean
的實現(xiàn), 它們隱藏了實例化的一系列復(fù)雜細(xì)節(jié),給上層應(yīng)用帶來了便利。自從 Srping3.0 開始 FactoryBean
開始支持泛型,即接口聲明改為 FactoryBean<T>
的形式,在 FactoryBean
的應(yīng)用中,SqlSessionFactoryBean
就是很好的實踐,在操作數(shù)據(jù)庫的過程中,提供了創(chuàng)建 SqlSession
的工廠 Factory
。
關(guān)于“Spring BeanFactory與FactoryBean的區(qū)別是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Spring BeanFactory與FactoryBean的區(qū)別是什么”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。