最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情

 更新時間:2022年05月05日 09:36:31   作者:??斜月????  
這篇文章主要介紹了Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情,BeanFactory?和?FactoryBean?的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進行分析講解,需要的小伙伴可以參考一下

前言:

在 Spring 中, IOC 是很重要的概念,其本質(zhì)就是 map 結(jié)構(gòu),存儲容器和業(yè)務(wù) Bean 信息。但是BeanFactory 和 FactoryBean 的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進行分析講解。

區(qū)別和聯(lián)系

BeanFactory

在 Spring 中,所有的 Bean 都是由 BeanFactory (也就是 IOC 容器)來進行管理的。BeanFactory 定義了容器的基本形式,并規(guī)定了 IOC 容器的基本接口以及生命周期,針對 BeanFactory 的實現(xiàn)類也有很多,比如ApplicationContextDefaultListableBeanFactory、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 本身,那么需要添加 & 符號作為前綴進行處理。

FactoryBean

但是在某些具體的情況下,實例化 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。 

總結(jié)

BeanFactory 提供一個 Spring IOC 容器規(guī)范, 能夠生產(chǎn)和管理 Bean 的一個工廠接口。但是 FactoryBean 是一種特殊的 Bean 創(chuàng)建方式,可以不必遵循 IOC 容器的規(guī)范,而是對 Bean 的一種擴展。對于復(fù)雜 Bean 對象創(chuàng)建和使用其可以封裝對象的創(chuàng)建細(xì)節(jié)。

到此這篇關(guān)于Spring BeanFactory 與 FactoryBean 的區(qū)別詳情的文章就介紹到這了,更多相關(guān)Spring BeanFactory 與 FactoryBean 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot攔截器過濾token,并返回結(jié)果及異常處理操作

    springboot攔截器過濾token,并返回結(jié)果及異常處理操作

    這篇文章主要介紹了springboot攔截器過濾token,并返回結(jié)果及異常處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決

    這篇文章主要介紹了idea中項目前端網(wǎng)頁圖標(biāo)不顯示的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java如何獲取List<String>中的String詳解

    Java如何獲取List<String>中的String詳解

    工作了這么長時間了,一直沒有記錄的習(xí)慣,以至于導(dǎo)致我即便是查過的東西總會忘記,下面這篇文章主要給大家介紹了關(guān)于Java如何獲取List<String>中String的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    這篇文章主要為大家介紹了AsyncHttpClient ChannelPool線程池頻道池源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • SpringBoot核心配置文件bootstrap與application用法

    SpringBoot核心配置文件bootstrap與application用法

    Spring Boot中有兩種配置文件:bootstrap和application,bootstrap是應(yīng)用程序的父上下文,優(yōu)先加載,不能被本地相同配置覆蓋,bootstrap主要用于加載外部配置信息,如SpringCloudConfig配置中心的配置,application主要用于Spring Boot項目的自動化配置
    2024-12-12
  • Java構(gòu)造方法和方法重載詳解

    Java構(gòu)造方法和方法重載詳解

    大家好,本篇文章主要講的是Java構(gòu)造方法和方法重載詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • SpringSecurity根據(jù)自定義異常返回登錄錯誤提示信息(賬戶鎖定)

    SpringSecurity根據(jù)自定義異常返回登錄錯誤提示信息(賬戶鎖定)

    本文介紹了在SpringSecurity中根據(jù)自定義異常返回登錄錯誤提示信息的方法,特別是在賬戶鎖定時,通過記錄輸錯次數(shù)、重寫校驗方法并拋出自定義異常,感興趣的可以了解一下
    2025-01-01
  • java多線程CyclicBarrier的使用案例,讓線程起步走

    java多線程CyclicBarrier的使用案例,讓線程起步走

    這篇文章主要介紹了java多線程CyclicBarrier的使用案例,讓線程起步走!具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot使用RabbitMQ延時隊列(小白必備)

    SpringBoot使用RabbitMQ延時隊列(小白必備)

    這篇文章主要介紹了SpringBoot使用RabbitMQ延時隊列(小白必備),詳細(xì)的介紹延遲隊列的使用場景及其如何使用,需要的小伙伴可以一起來了解一下
    2019-12-12
  • 淺談Maven Wrapper

    淺談Maven Wrapper

    這篇文章主要介紹了淺談Maven Wrapper,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

中山市| 樟树市| 西贡区| 崇州市| 南陵县| 虎林市| 互助| 永宁县| 隆昌县| 淅川县| 黎川县| 娄烦县| 岗巴县| 内乡县| 洛扎县| 怀远县| 罗田县| 溧水县| 金沙县| 城步| 公安县| 游戏| 武胜县| 台北县| 禹州市| 荔波县| 友谊县| 衡东县| 黄大仙区| 磐石市| 通山县| 阳谷县| 江安县| 阳信县| 宝坻区| 云霄县| 宣城市| 抚顺县| 视频| 高尔夫| 天柱县|