Spring 學(xué)習(xí)筆記(二)
DI-------Bean 裝配容器可以創(chuàng)建組件,裝配和配置組件,以及管理它們的整個(gè)生命周期。
容器是Spring框架的核心。Spring容器使用DI管理所有組成應(yīng)用系統(tǒng)的組件。這包括在協(xié)作組件之間建立關(guān)聯(lián)。而且這些對象簡潔易懂,支持重用,容易被測試。
Spring提供了多種容器實(shí)現(xiàn),并分為兩類。
一是:Bean工廠org.springframework.beans.factory.BeanFactory接口定義,是最簡單的容器,提供了基礎(chǔ)的依賴注入支持。
二是:應(yīng)用上下文org.springframework.context.ApplicationContext接口定義,建立在Bean工廠之上,提供了系統(tǒng)構(gòu)架服務(wù)。
BeanFactory介紹
Bean工廠是一個(gè)通用的工廠,可以創(chuàng)建和分發(fā)各種類型的Bean.除了簡單的實(shí)例化和分發(fā)應(yīng)用對象以外,Bean工廠還有很多工作需要做。由于其知道應(yīng)用系統(tǒng)中的很多對象,所以它可以在實(shí)例化這些對象的時(shí)候,創(chuàng)建協(xié)作對象間的關(guān)聯(lián)關(guān)系。這樣就把配置的負(fù)擔(dān)從Bean自身及Bean的調(diào)用者中脫離出來。結(jié)果,Bean工廠分發(fā)出來的Bean都已經(jīng)被配置好了,都得到了它們的關(guān)聯(lián)對象,已經(jīng)可以被使用了。Bean工廠還要參與到Bean的生命周期中,調(diào)用用戶定義的初始化和銷毀方法。
例如:
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("c:/beans.xml"));
這行代碼告訴Bean工廠從XML文件中讀取Bean的定義信息。但是,現(xiàn)在Bean工廠還沒有實(shí)例化Bean。Bean是被延遲載入到Bean工廠中的,就是說Bean工廠會(huì)立即把Bean定義信息載入進(jìn)來,但是Bean只有在被需要的時(shí)候才能被實(shí)例化。
MyBean myBean = (MyBean) factory.getBean("myBean");
當(dāng)getBean()方法被調(diào)用的時(shí)候,工廠才會(huì)實(shí)例化Bean并且使用依賴注入設(shè)置Bean的屬性。
使用應(yīng)用上下文介紹
表面上ApplicationContext和BeanFactory差不多。兩者都是載入Bean定義信息,裝配Bean,根據(jù)需要分發(fā)Bean。但是ApplicationContext提供了更多的功能:
a.應(yīng)用上下文提供了文本信息解析工具,包括對國際化的支持。
b.應(yīng)用上下文提供了載入文件資源的通用方法,如載入圖片。
c.應(yīng)用上下文可以向注冊為監(jiān)聽器的Bean發(fā)送事件。
應(yīng)用上下文的三種實(shí)現(xiàn):
1.ClassPathXmlApplicationContext
2.FileSystemXmlApplicationContext
3.XmlWebApplicationContext
除了應(yīng)用上下文提供的附加功能外,與BeanFactory另一個(gè)重要的區(qū)別是關(guān)于單實(shí)例Bean是如何被載入的。Bean工廠延遲載入所有的Bean,直到getBean()方法被調(diào)用時(shí)Bean才被創(chuàng)建。應(yīng)用上下文則更聰明一點(diǎn),它會(huì)在上下文啟動(dòng)后預(yù)載入所有的實(shí)例Bean。通過預(yù)載入單實(shí)例Bean,確保當(dāng)你需要的時(shí)候它們已經(jīng)準(zhǔn)備好了,你的應(yīng)用不需要等待它們被創(chuàng)建。
posted on 2008-09-10 16:30 紅石 閱讀(141) 評論(0) 編輯 收藏 所屬分類: spring