<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,  comments - 11,  trackbacks - 0
        傳統(tǒng)建立應(yīng)用系統(tǒng)對象之間關(guān)聯(lián)關(guān)系的方法會導(dǎo)致復(fù)雜的代碼,使它們很難被服用,很難做單元測試。在Spring中,組件無需自己負責(zé)與其他組件的關(guān)聯(lián)。取而代之的是,容器負責(zé)把協(xié)作左鍵的引用給予各個組件。創(chuàng)建系統(tǒng)組件之間協(xié)作關(guān)系的這個動作叫做裝配。
        容器是Spring框架的核心。Spring容器使用IOC管理所有組成應(yīng)用系統(tǒng)的組件。這包括在協(xié)作組件之間建立關(guān)聯(lián)。Spring實際上有2種不同的容器:Bean工廠(org.springframewor.bens.factory.BeanFactory接口定義)是最簡單的容器,提供了基礎(chǔ)的依賴注入支持。應(yīng)用上下文(由org.springframework.contextApplicationContext接口定義)建立在Bean工廠基礎(chǔ)之上,提供了系統(tǒng)架構(gòu)服務(wù)。
        (1)、BeanFactory這個類負責(zé)創(chuàng)建和分發(fā)Bean.由于Bean工廠知道應(yīng)用系統(tǒng)中的很多對象,所以它可以在實例化這些對象的時候,創(chuàng)建協(xié)作對象間的關(guān)聯(lián)關(guān)系。這樣就把配置的負擔(dān)從Bean自身以及Bean的調(diào)用者中脫離出來。在Spring中有幾種BeanFactory的實現(xiàn)。其中最常使用的是org.springframework.beans.factory.xml.XmlBeanFactory,它根據(jù)XML文件中的定義裝載Bean.
    例如:BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));
    這行代碼告訴Bean工廠從XML文件中讀取Bean的定義信息。但是,現(xiàn)在Bean工廠還沒有實例化Bean.Bean是被延遲載入到Bean工廠中的,就是說Bean工廠會立即把Bean定義信息載入進來,但是Bean只有在被需要的時候才被實例化。
          MyBean myBean = (MyBean)factory.getBean("myBean");
    當(dāng)getBean()方法被調(diào)用的時候,工廠就會實例化Bean并且使用依賴注入開始設(shè)置Bean的屬性。
        (2)、ApplicationContext的諸多實現(xiàn)中,有3個實現(xiàn)經(jīng)常用到:
      ClassPathXmlApplicationContext-從類路徑中的XML文件載入上下文定義信息,把上下文定義文件當(dāng)成類路徑資源。
      FileSystemXmlApplicationContext-從文件系統(tǒng)中的XML文件載入上下文定義信息。
      XmlWebApplicationContext-從web系統(tǒng)中的XML文件載入上下文定義信息。
    例如:ApplicationContext context = new FileSystemXmlApplicationContext("c:/foo.xml");
          ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");
    FileSystemXmlApplicationContext只能在指定的路徑中尋找foo.xml文件,而ClassPathXmlApplicationContext可以在整個類路徑中尋找foo.xml.
        應(yīng)用上下文與Bean工廠的另一個重要區(qū)別是關(guān)于單實例Bean是如何被載入的。Bean工廠延遲載入所有的Bean,知道getBean()方法被調(diào)用時Bean才被創(chuàng)建。應(yīng)用上下文啟動后預(yù)載入所有的單實例Bean.

        Spring中的Bean缺省情況下是單例模式。在容器分配Bean的時候,它總是返回同一個實例。如果想每次得到不同的實例你需要將Bean定義為原型模式。定義為原型模式意味著你是定義一個Bean藍圖,而不是一個單一的Bean.<bean>的singleton屬性告訴這個bean是否是單例的,如果是true表示是單例的,如果是false表示是原型的。

    <bean id="connectionPool" class="com.springinaction.chapter02.MyConnectionPool" init-method="initialize" destroy-method="close"/>

    按這樣配置,MyConnectionPool被實例化后initialize()方法馬上被調(diào)用,給Bean初始化池的機會。在Bean從容器中刪除之前,close()方法將釋放數(shù)據(jù)庫連接。

    設(shè)值注入:它是一種基于標準命名規(guī)范的設(shè)置Bean屬性的技術(shù)。JavaBean規(guī)范規(guī)定使用對應(yīng)的set和get方法來設(shè)置和獲得Bean的屬性值。<property>元素的子元素<value>用來設(shè)置普通類型的屬性,子元素<ref bean="">用來設(shè)置要關(guān)聯(lián)的Bean.

    內(nèi)部Bean:另一種不常使用的裝配Bean引用的方法是在<property>元素中嵌入一個<bean>元素。
    <bean id="courseService" class="com.springinaction.service.training.CourseServiceImpl">
        
    <property name="studentService">
            
    <bean class="com.springinaction.service.training.StudentServiceImpl"/>
        
    </property>
    </bean>

    這種裝配Bean引用的方式的缺點是你無法在其他地方重用這個StudentServiceImpl實例,因為它是一個專門的courseServiceBean建立的實例。

    注入的是對象集:如果你有一個屬性是一個列表或是一個Bean引用集合,Spring支持多種類型的集合作為屬性。
    <list><set><map><props>

    裝配List和數(shù)組:裝配一個List屬性,List里的元素可以是任何一種元素,包括<value><ref>甚至是其他<list>
    <property name="barList">
        
    <list>
            
    <value>bar1</value>
            
    <ref bean="bar2"/>
        
    </list>
    </property>


    裝配Set:和List一樣,Set可以包含任何類型的屬性。
    <property name="barSet">
        
    <set>
            
    <value>bar1</value>
            
    <ref bean="bar2"/>
        
    </set>
    </property>

    <set>的使用方法和<list>是一樣的。唯一不同的地方是它被裝到什么樣的屬性中。<list>是向java.util.List或數(shù)組里裝配數(shù)據(jù),而<set>是向java.util.Set中裝配數(shù)據(jù)。

    裝配Map:
    <property name="barMap">
        
    <map>
            
    <entry key="key1">
                
    <value>bar1</value>
            
    </entry>
            
    <entry key="key2">
                
    <value>bar2</value>
            
    </entry>
        
    </map>
    </property>

    Map中的<entry>的數(shù)值和<list>以及<set>的一樣,可以是任何有效的屬性元素。重申一邊,包括<value>、<ref>、<list>甚至是另一個<map>。注意,配置<entry>時,屬性key的值只能是String.這對于java.util.Map的功能來說有一點限制,java.util.Map是允許任何類型的對象作為主鍵的。

    裝配properties:java.util.Properties集合是最后一個能在Spring中裝配的集合類。使用<props>元素來裝配它。使用<prop>元素表示每條屬性。
    <property name="barProps">
        
    <props>
            
    <prop key="key1">bar1</prop>
            
    <prop key="key2">bar2</prop>
        
    </props>
    </property>


    設(shè)置null
    為了將一個屬性設(shè)為null,你只要使用<null/>元素就行了。
    例如:
    <property name="foo"><null/><property>



    posted on 2009-10-29 10:28 王永慶 閱讀(1598) 評論(2)  編輯  收藏 所屬分類: SPRING


    FeedBack:
    # re: Spring學(xué)習(xí)筆記(四)-----Spring in Action
    2009-11-02 22:45 | 天堂露珠
    推薦看:《Spring Recipes :A Problem-Solution Approach》
    內(nèi)容是基于Spring2.5的。
    Spring in Action 好像是基于Spring2.0的。
      回復(fù)  更多評論
      
    # re: Spring學(xué)習(xí)筆記(四)-----Spring in Action
    2009-11-02 23:12 | wyq
    @天堂露珠
    技術(shù)是永遠都沒有盡頭的,但是它的出現(xiàn)是有原因的,只要了解出現(xiàn)的原因及出現(xiàn)的本質(zhì),你就沒有白學(xué),如果只是一味的去追求技術(shù),那你會很累,你也看不到本質(zhì)。就像現(xiàn)在出了EJB3.0難道2.0就不看了么,現(xiàn)在的這些框架把程序員變的越來越笨。多了解一些本質(zhì),我認為是有必要的。  回復(fù)  更多評論
      
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關(guān)注blogs

    搜索

    •  

    最新評論

    • 1.?re: 心中的那個她[未登錄]
    • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
    • --王永慶
    • 2.?re: 心中的那個她[未登錄]
    • 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
    • --萍水相逢
    • 3.?re: 心中的那個她
    • 只能同甘不能共苦,就他媽算了吧,程序員也是人?。∥椰F(xiàn)在也很討厭女的不理解人情。
    • --咖啡妝
    • 4.?re: 難以割舍的那份情感
    • 評論內(nèi)容較長,點擊標題查看
    • --王永慶
    • 5.?re: 難以割舍的那份情感
    • 評論內(nèi)容較長,點擊標題查看
    • --隔葉黃鶯

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成777在线播放| 亚洲va成无码人在线观看| 亚洲成av人在线观看网站| 蜜桃传媒一区二区亚洲AV| 2021久久精品免费观看| 免费人成年轻人电影| 精品亚洲成α人无码成α在线观看 | 亚洲人成电影网站色| 国产国产人免费人成成免视频| 久久国产免费福利永久| 亚洲嫩草影院在线观看| 免费A级毛片无码无遮挡内射| 久久精品国产亚洲AV蜜臀色欲| 欧美在线看片A免费观看| 亚洲精品无码你懂的网站| 丁香六月婷婷精品免费观看| 狠狠色婷婷狠狠狠亚洲综合| 97在线免费视频| 国产乱子伦精品免费女| 亚洲小说区图片区| 四虎在线视频免费观看| 青青草原精品国产亚洲av| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 免费看的黄色大片| 人妻无码中文字幕免费视频蜜桃| 啦啦啦中文在线观看电视剧免费版| 亚洲色成人网站WWW永久四虎| 免费观看无遮挡www的视频 | 国产午夜亚洲精品不卡免下载| 国产啪亚洲国产精品无码| 久久国产色AV免费观看| 亚洲色在线无码国产精品不卡| 四虎精品亚洲一区二区三区| 久久亚洲精品国产亚洲老地址 | 夜夜爽免费888视频| 51午夜精品免费视频| 亚洲字幕在线观看| 亚洲精品国产精品乱码不卞| 美女内射无套日韩免费播放| 亚洲色www永久网站| 国产成人综合亚洲AV第一页|