亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言:

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

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

BeanFactory

在 Spring 中,所有的 Bean 都是由 BeanFactory (也就是 IOC 容器)來進(jìn)行管理的。BeanFactory 定義了容器的基本形式,并規(guī)定了 IOC 容器的基本接口以及生命周期,針對 BeanFactory 的實(shí)現(xiàn)類也有很多,比如ApplicationContext、DefaultListableBeanFactory、XmlBeanFactory 都是其添加了附加功能的接口。BeanFactory 創(chuàng)建的 Bean 對象需要遵循以下的生命周期形式,并且 Bean 的生產(chǎn)都是通過反射機(jī)制來實(shí)現(xiàn)的。

在英文中,Aware 是意識的意思,可以看到 BeanFactory 的生命周期流程包含了諸多的 Aware 接口:

以下為 BeanFactory 接口生命周期相關(guān)的一下方法,在項(xiàng)目開發(fā)中,ApplicationContextAwareInitializingBean 和 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)行處理。

FactoryBean

但是在某些具體的情況下,實(shí)例化 Bean 的操作會很復(fù)雜,按照其要求需要配置大量的屬性,此時 Bean 的配置靈活性就受到了限制,此時就需要使用到 FactoryBean 了,該接口可以按照用戶的需求來構(gòu)造 Bean 對象,而不再遵守 Bean 生命周期的流程。Spring 自身就提供了很多 FactoryBean 的實(shí)現(xiàn), 它們隱藏了實(shí)例化的一系列復(fù)雜細(xì)節(jié),給上層應(yīng)用帶來了便利。自從 Srping3.0 開始 FactoryBean 開始支持泛型,即接口聲明改為 FactoryBean<T> 的形式,在 FactoryBean 的應(yīng)用中,SqlSessionFactoryBean 就是很好的實(shí)踐,在操作數(shù)據(jù)庫的過程中,提供了創(chuàng)建 SqlSession 的工廠 Factory。 

總結(jié)

BeanFactory 提供一個 Spring IOC 容器規(guī)范, 能夠生產(chǎn)和管理 Bean 的一個工廠接口。但是 FactoryBean 是一種特殊的 Bean 創(chuàng)建方式,可以不必遵循 IOC 容器的規(guī)范,而是對 Bean 的一種擴(kuò)展。對于復(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封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過程詳解

    SpringBoot封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了SpringBoot封裝響應(yīng)數(shù)據(jù)實(shí)現(xiàn)過程,SpringBoot響應(yīng)數(shù)據(jù)封裝是指在SpringBoot應(yīng)用程序中,將返回的數(shù)據(jù)進(jìn)行封裝,以便于前端頁面或其他客戶端使用,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • redis與ssm整合方法(mybatis二級緩存)

    redis與ssm整合方法(mybatis二級緩存)

    本文給大家介紹redis與ssm整合方法(mybatis二級緩存)。主要是利用redis去做mybatis的二級緩存,mybaits映射文件中所有的select都會刷新已有緩存,如果不存在就會新建緩存,所有的insert,update操作都會更新緩存
    2017-12-12
  • IDEA內(nèi)存調(diào)試插件(好用)

    IDEA內(nèi)存調(diào)試插件(好用)

    本文給大家分享IDEA中一個很有用的內(nèi)存調(diào)試插件,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2018-02-02
  • Java synchronized鎖升級jol過程詳解

    Java synchronized鎖升級jol過程詳解

    這篇文章主要介紹了Java synchronized鎖升級jol過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • java方法通用返回結(jié)果集封裝操作

    java方法通用返回結(jié)果集封裝操作

    這篇文章主要介紹了java方法通用返回結(jié)果集封裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解SpringBoot修改啟動端口server.port的四種方式

    詳解SpringBoot修改啟動端口server.port的四種方式

    這篇文章主要介紹了詳解SpringBoot修改啟動端口server.port的四種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中Integer的parseInt和valueOf的區(qū)別詳解

    Java中Integer的parseInt和valueOf的區(qū)別詳解

    這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類型,Integer.valueOf(s)是把字符串解析成Integer對象類型,其實(shí)int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下
    2023-11-11
  • 淺談單例模式和線程安全問題

    淺談單例模式和線程安全問題

    這篇文章主要介紹了淺談單例模式和線程安全問題,再某些特殊的情況下,存在一個類僅能用來產(chǎn)生一個唯一對象的必要性,因此需要單例模式,需要的朋友可以參考下
    2023-04-04
  • 淺析Java中的動態(tài)代理

    淺析Java中的動態(tài)代理

    動態(tài)代理指代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時候確定的,客戶通過代理類來調(diào)用目標(biāo)對象的方法。本文將通過案例詳細(xì)講解一下Java動態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-09-09
  • 解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題

    解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題

    這篇文章主要介紹了解決SecureRandom.getInstanceStrong()引發(fā)的線程阻塞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論