Spring FactoryBean和BeanFactory 區(qū)別

1 BeanFactory 是ioc容器的底層實現(xiàn)接口苔可,是ApplicationContext 頂級接口

spring不允許我們直接操作 BeanFactory bean工廠,所以為我們提供了ApplicationContext 這個接口繼承BeanFactory 接口酝碳,ApplicationContext包含BeanFactory的所有功能,同時還進行更多的擴展增热。

BeanFactory 接口又衍生出以下接口洪橘,其中我們經(jīng)常用到的是ApplicationContext 接口

ApplicationContext 繼承圖

在這里插入圖片描述

CongihuableApplicationContext 中添加了一些方法:

    ... 其他省略
    
    //刷新ioc容器上下文
    void refresh() throws BeansException, IllegalStateException;

// 關(guān)閉此應(yīng)用程序上下文鲸睛,釋放所有資源并鎖定,銷毀所有緩存的單例bean瞻惋。
    @Override
    void close();

//確定此應(yīng)用程序上下文是否處于活動狀態(tài),即援岩,是否至少刷新一次且尚未關(guān)閉歼狼。
    boolean isActive();

    ... 其他省略
    

主要作用在ioc容器進行相應(yīng)的刷新,關(guān)閉等操作享怀!

FileSystemXmlApplicationContext 和ClassPathXmlApplicationContext 是用來讀取xml文件創(chuàng)建bean對象
ClassPathXmlApplicationContext  : 讀取類路徑下xml 創(chuàng)建bean
FileSystemXmlApplicationContext :讀取文件系統(tǒng)下xml創(chuàng)建bean
AnnotationConfigApplicationContext 主要是注解開發(fā)獲取ioc中的bean實例

2 FactoryBean 是spirng提供的工廠bena的一個接口

FactoryBean 接口提供三個方法羽峰,用來創(chuàng)建對象,
FactoryBean 具體返回的對象是由getObject 方法決定的添瓷。


 */
public interface FactoryBean<T> {

//創(chuàng)建的具體bean對象的類型
    @Nullable
    T getObject() throws Exception;

 //工廠bean 具體創(chuàng)建具體對象是由此getObject()方法來返回的
    @Nullable
    Class<?> getObjectType();
    
  //是否單例
    default boolean isSingleton() {
        return true;
    }

}

創(chuàng)建一個FactoryBean 用來生產(chǎn)User對象

@Component
public class FactoryBeanTest implements FactoryBean<User> {


    //創(chuàng)建的具體bean對象的類型
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }


    //是否單例
    @Override
    public boolean isSingleton() {
        return true;
    }

    //工廠bean 具體創(chuàng)建具體對象是由此getObject()方法來返回的
    @Override
    public User getObject() throws Exception {
        return new User();
    }
}

Junit測試

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {FactoryBeanTest.class})
@WebAppConfiguration
public class SpringBootDemoApplicationTests {
    @Autowired
    private ApplicationContext applicationContext;

    @Test
    public void tesst() {
        FactoryBeanTest bean1 = applicationContext.getBean(FactoryBeanTest.class);
        try {
            User object = bean1.getObject();
            System.out.println(object==object);
            System.out.println(object);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

結(jié)果

true
User [id=null, name=null, age=0]

簡單的總結(jié):

BeanFactory是個bean 工廠梅屉,是一個工廠類(接口), 它負責生產(chǎn)和管理bean的一個工廠
是ioc 容器最底層的接口鳞贷,是個ioc容器坯汤,是spring用來管理和裝配普通bean的ioc容器(這些bean成為普通bean)。

FactoryBean是個bean搀愧,在IOC容器的基礎(chǔ)上給Bean的實現(xiàn)加上了一個簡單工廠模式和裝飾模式玫霎,是一個可以生產(chǎn)對象和裝飾對象的工廠bean,由spring管理后妈橄,生產(chǎn)的對象是由getObject()方法決定的(從容器中獲取到的對象不是
“ FactoryBeanTest ” 對象)庶近。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市眷蚓,隨后出現(xiàn)的幾起案子鼻种,更是在濱河造成了極大的恐慌,老刑警劉巖沙热,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉钥,死亡現(xiàn)場離奇詭異罢缸,居然都是意外死亡,警方通過查閱死者的電腦和手機投队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門枫疆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敷鸦,你說我怎么就攤上這事息楔。” “怎么了扒披?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵值依,是天一觀的道長。 經(jīng)常有香客問我碟案,道長愿险,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任价说,我火速辦了婚禮辆亏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖目。我一直安慰自己扮叨,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布疑苔。 她就那樣靜靜地躺著甫匹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惦费。 梳的紋絲不亂的頭發(fā)上兵迅,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音薪贫,去河邊找鬼恍箭。 笑死,一個胖子當著我的面吹牛瞧省,可吹牛的內(nèi)容都是我干的扯夭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鞍匾,長吁一口氣:“原來是場噩夢啊……” “哼交洗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橡淑,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤构拳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體置森,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡斗埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凫海。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呛凶。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖行贪,靈堂內(nèi)的尸體忽然破棺而出漾稀,到底是詐尸還是另有隱情,我是刑警寧澤瓮顽,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布县好,位于F島的核電站围橡,受9級特大地震影響暖混,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翁授,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一拣播、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧收擦,春花似錦贮配、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宴猾,卻和暖如春圆存,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仇哆。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工沦辙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讹剔。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓油讯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親延欠。 傳聞我的和親對象是個殘疾皇子陌兑,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容