聊聊Spring中的工廠
BeanFactory是Spring IOC容器的根接口,定義了Bean工廠的最基礎的功能特性,比如根據name獲取指定bean等,根據不同用途它的子接口又對它的功能進行細化,比如是否是可列表的,是否是有層次關系的,是否擁有自動裝配能力等。它最常用的實現類DefaultListableBeanFactory,它直接或通過繼承間接實現了上述接口的所有功能,並被ApplicationConext的實現類持有,實例化為運行中的IOC容器(一系列可能有相互依賴關系的Bean集合)。
FactoryBean是一類特殊的Bean接口定義,它的實現類實例是一個工廠,可以通過getObject生產Bean實例,並會根據是否單例模式來返回共享的實例或者創建一個新的原型實例。
ObjectFactory做為一個工廠用來生成Object(這個接口只有一個方法getObject())。這個接口一般被用來,包裝一個factory,通過個這工廠來返回一個新實例(prototype類型)。這個接口和FactoryBean有點像,但FactoryBean的實現是被當做一個SPI(Service Provider Interface)實例來使用在BeanFactory裏面;ObjectFactory的實現一般被用來註入到其它Bean中,作為API來使用。就像ObjectFactoryCreatingFactoryBean的例子,它的返回值就是一個ObjectFactory,這個ObjectFactory被註入到了Bean中,在Bean通過這個接口的實例,來取得我們想要的Bean。
總的來說,FactoryBean和ObjectFactory都是用來取得Bean,但使用的方法和地方不同,FactoryBean被配置好後,Spring調用getObject()方法來取得Bean,ObjectFactory配置好後,在Bean裏面可以取得ObjectFactory實例,需要我們手動來調用getObject()來取得Bean。
聊聊Spring中的工廠