成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring的BeanFactory與FactoryBean的區別,你現在懂了嗎?

開發 前端
BeanFactory? 是個 Factory?,也就是IOC容器或對象??,FactoryBean? 是個 Bean?。在 Spring? 中,所有的 Bean? 都是由 BeanFactory?(也就是IOC容器)來進?管理的。

我們還是來剖析面試題,今天了不起來來帶大家看看這個需要看源碼的面試題,因為面試的時候,有很多情況不一定需要去看源碼就能回答的問題,但是也有很多的問題是需要我們去看源碼才能回答的問題,今天我們就來看看一個比較經典的問題,也是關于Spring 的面試題。

BeanFactory

BeanFactory 是 Spring 容器的頂級接?,給具體的IOC容器的實現提供了規范。

BeanFactory 只是個接口,并不是IOC容器的具體實現.

而 Spring 的本質是一個 Bean 工廠( BeanFactory )或者說 Bean 容器,它按照我們的要求,生產我們需要的各種各樣的 Bean ,提供給我們使用。只是在生產 Bean 的過程中,需要解決 Bean 之間的依賴問題,才引入了依賴注入(DI)這種技術。也就是說依賴注入是 BeanFactory 生產 Bean 時為了解決 Bean 之間的依賴的一種技術而已。

BeanFactory 的實現

Spring 容器給出了很多種實現,如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext 等。而這些具體的容器都是實現了 BeanFactory ,再在其基礎之上附加了其他的功能。

DefaultListableBeanFactory

BeanFactory 接口體系的默認實現類,實現以上接口的功能,提供 BeanDefinition 的存儲 map ,Bean 對象對象的存儲 map 。

其中 Bean 對象實例的存儲 map ,定義在 FactoryBeanRegistrySupport , FactoryBeanRegistrySupport 實現了 SingletonBeanRegistry 接口,而 DefaultListableBeanFactory 的基類 AbstractBeanFactory ,繼承于 FactoryBeanRegistrySupport。

StaticListableBeanFactory

用于存儲給定的 bean 對象實例,不支持動態注冊功能,是 ListableBeanFactory 接口的簡單實現。

ApplicationContext

ApplicationContext 包含 BeanFactory 的所有功能,通常建議? BeanFactory 優先。

ApplicationContext 以?種更向?向框架的?式?作以及對上下?進?分層和實現繼承,ApplicationContext 包還提供了以下的功能:

  • MessageSource, 提供國際化的消息訪問。
  • 資源訪問,如URL和?件
  • 事件傳播
  • 載?多個(有繼承關系)上下? ,使得每?個上下?都專注于?個特定的層次,?如應?的web 層;

BeanFactory 提供的?法及其簡單,僅提供了六種?法供客戶調?:源碼如下

String FACTORY_BEAN_PREFIX = "&";
    
//判斷??中是否包含給定名稱的bean定義,若有則返回true
    boolean containsBean(String beanName) 

//返回給定名稱注冊的bean實例。根據bean的配置情況,如果是
singleton模式將返回?個共享實例,否則將返回?個新建的實例,如果沒有找到指定bean,該?法
可能會拋出異常
Object getBean(String) 

//返回以給定名稱注冊的bean實例,并轉換為給定class類型
Class getType(String name) 返回給定名稱的bean的Class,如果沒有找到指定的bean實例,則排
除NoSuchBeanDefinitionException異常
Object getBean(String, Class) 

//判斷給定名稱的bean定義是否為單例模式
boolean isSingleton(String) 

//返回給定bean名稱的所有別名
String[] getAliases(String name)

而 FactoryBean 是干什么用的呢?

FactoryBean

?般情況下,Spring 通過反射機制利? <bean>  的 class 屬性指定實現類實例化 Bean,在某些情況下,實例化 Bean 過程?較復雜,如果按照傳統的?式,則需要在 <bean> 中提供?量的配置信息。配置?式的靈活性是受限的,這時采?編碼的?式可能會得到?個簡單的?案。

Spring 為此提供了?個 org.springframework.bean.factory.FactoryBean 的??類接?,?戶可以通過實現該接?定制實例化Bean的邏輯。FactoryBean 接?對于 Spring 框架來說占?重要的地位,Spring ?身就提供了70多個 FactoryBean 的實現。它們隱藏了實例化?些復雜 Bean 的細節,給上層應?帶來了便利。從 Spring3.0 開始,FactoryBean 開始?持泛型,即接?聲明改為 FactoryBean<T> 的形式

以 Bean 結尾,表示它是?個 Bean ,不同于普通 Bean 的是:它是實現了 FactoryBean<T> 接?的 Bean ,根據該 Bean 的ID從BeanFactory 中獲取的實際上是 FactoryBean 的 getObject()返回的對象,?不是 FactoryBean 本身,如果要獲取 FactoryBean 對象,請在id前?加?個 & 符號來獲取。

例如??實現?個 FactoryBean,功能:?來代理?個對象,對該對象的所有?法做?個攔截,在調?前后都輸出??LOG,模仿 ProxyFactoryBean 的功能。

FactoryBean ?個接?,當在IOC容器中的 Bean 實現了 FactoryBean 后,通過 getBean(StringBeanName) 獲取到的 Bean 對象并不是 FactoryBean 的實現類對象,?是這個實現類中的 getObject()?法返回的對象。要想獲取 FactoryBean 的實現類,就要getBean(&BeanName),在 BeanName 之前加上&.

在該接?中還定義了以下3個?法:

TgetObject():返回由FactoryBean創建的Bean實例,如果isSingleton()返回true,則該實例會放到Spring容器中單實例緩存池中;

booleanisSingleton():返回由FactoryBean創建的Bean實例的作?域是singleton還是
prototype;

ClassgetObjectType():返回FactoryBean創建的Bean類型。

總結

BeanFactory 是個 Factory,也就是IOC容器或對象??,FactoryBean 是個 Bean。在 Spring 中,所有的 Bean 都是由 BeanFactory(也就是IOC容器)來進?管理的。但對 FactoryBean??,這個 Bean 不是簡單的 Bean ,?是?個能?產或者修飾對象?成的?? Bean,它的實現與設計模式中的??模式和修飾器模式類似。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2025-03-10 09:30:00

SpringJava開發

2022-04-07 08:20:22

typeinterface前端

2023-07-06 14:24:23

Spring接口自定義

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2022-05-06 09:21:21

TypeScriptinterfacetype

2023-03-03 16:38:28

JavaSpring框架

2013-12-26 09:44:30

互聯網物聯網區別

2021-10-10 20:36:49

Android Root權限

2022-11-28 07:10:57

2024-08-12 15:23:43

LangChain

2022-06-07 08:14:35

PGPAGETUPLE

2024-03-05 18:19:07

localhostLinux數據庫

2023-10-16 08:16:31

Bean接口類型

2011-06-14 12:56:55

SQL Server復災

2022-03-08 15:01:48

負載均衡IP服務器

2024-04-07 08:23:01

JS隔離JavaScript

2018-10-20 16:05:12

iOSAPP開發

2024-02-04 00:00:00

@ValidSpring@Validated

2024-09-29 08:47:55

2019-09-11 10:05:48

HTMLCSSJavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲电影专区 | 在线国产视频 | 在线伊人网 | 草草草网站 | 日韩一区精品 | 中文字幕高清视频 | 欧美一区在线看 | 成人三级视频在线观看 | 1级黄色大片 | 中文字幕高清 | 国产精品精品视频一区二区三区 | 国产精品18久久久久久久 | 中文字幕 在线观看 | 羞羞视频网页 | 国产一区免费 | 欧美成人激情 | 国产精品mv在线观看 | 久久久久久久久久久久久久av | 久久久久久久久久久蜜桃 | 久久国产精品一区二区三区 | 精品九九 | 亚洲国产一区二区视频 | 成人性视频免费网站 | 免费黄色在线 | 日本爱爱视频 | 日本一道本视频 | 干狠狠 | 欧美视频免费在线 | 国产精品一区久久久 | 国产精品午夜电影 | 毛片.com| 久久人人网 | 国产午夜精品一区二区三区在线观看 | 黄色骚片| 热久久久 | 久久久久久久97 | 中文字幕91av | 国产a区| av在线播放不卡 | 亚洲男人的天堂网站 | 91精品国产自产精品男人的天堂 |