4 回答

TA貢獻1995條經驗 獲得超2個贊
BeanFactory:實現這個接口的對象它們可以作為它們自己的工廠(這個根接口,用來訪問spring容器),其實spring可以成為容器很大一部分是依賴這個接口
FactoryBean:如果某個對象實現了這個接口,這個對象會被當做一個工廠(為了讓某個對象暴露),而不是直接以一個對象暴露自己。
以上為英文渣翻譯。
說說我的理解:
之前沒有研究過這兩個對象的區別,剛剛看了一下源碼的翻譯和一些類的實現,發現挺有意思的。
首先BeanFactory,需要知道對象的一系列屬性(通過XML配置),然后再構造對象,并對對象進行管理,如對象的生命周期,是否單例,以及復合對象(對象有其他對象的引用)的組裝(自動裝配),對象初始化的一些準備工作,屬性注入等等,能說一堆??梢哉fBeanFactory更像一個公司,而不像是FactoryBean,這個對象更像一個工廠,是專門生產某一類對象,幾乎沒有管理功能,只是單一的構造對象而已。

TA貢獻1836條經驗 獲得超3個贊
BeanFactory是IOC容器,本身并不創建Bean,而是通過一系列組件的配合管理Bean。主要的方法是getBean,從容器中獲取Bean的實例。
FactoryBean是創建Bean的工廠,它們都實現了FactoryBean接口,主要的方法是getObject,該方法返回的是FactoryBean想要創建的class的實例,而不是FactoryBean自己的實例。在Spring中有超過50+的FactoryBean。這些FactoryBean的作用是不同的。
之一是:通過FactoryBean創建指定class的實例,并是該實例得到能力的增強。例如:TransactionProxyFactoryBean就是讓普通的Service具有了事務的能力。它的getObject返回的是普通的Service的實例,但是通過動態代理的方式對普通Service的實例進行了事務能力的增強。
之一是:某些Bean在特定場景下的實例化過程比較復雜,那么將這些實例化過程通過FactoryBean的方式進行封裝,就能夠快速的制造出該場景下的目標對象的實例。如:EhCacheFactoryBean。
所以一個最核心的功能是管理Bean的IOC容器,一個是某類Bean的生產工廠。所以更多的時候,我們理解ApplicationContext接口和FactoryBean接口的作用就很容易理解了。
添加回答
舉報