Spring容器


為整個系統所組成的所有組件提供運行環境

    Spring IOC可管理的都是一切可實例的類
    Spring管理的對象都是單實例的,不能實例有存儲能力的類(JavaBean)
    管理組件的兩種方式:
    1.構造注入
    2.設值注入
    
    由容器向實例注入的過程叫依賴注入,也叫控制反轉。
    創建對象的控制權交給了Spring容器。

    Spring提供了兩個核心接口:
    1.BeanFactory---調用getbean()時實例化對象
    2.ApplicationContext---容器產生就實例化對象
    他們都可以代表Spring容器,是生成Bean實例的工廠,並管理。在基於Spring的EE應用,所有
    組件都被當成Bean處理。

    Spring容器產生的對象默認都是單實例的,並且他的整個生命周期都由容器負責管理。
    <scope="prototype" 原型模式,容器產生對象時,以第一個為原型,調用一次則產生一個新的對象,這時容器不知道你的程序調用了多少次,所以他不再負責對象的生命周期,它只負責生,不負責養。由程序自身去負責對象的生命周期(GC)>

    <scope="request" 該作用域與HTTP Request相關,當容器接收到一個HTTP請求時,容器產生一個對應的對象,當HTTP Request處理完畢,容器銷毀已產生的該實例>

    <scope="session" 該作用域與HTTP Session相關,當容器接收到同一個Session會話時,容器產生一個對應的實例對象,當HTTP Session關閉時,容器銷毀已經產生的該實例>
    
    <scope="global session" 當程序是分布式情況,並且程序是做了Session同步的情況,整個程序中所有的spring容器只產生一個對應的實例對象,如果我們不是分布式情況,或者說沒有做Session同步的情況,那么即便你設值了global session,那么作用范圍也會回退到session層面>
    
    <scope="application" 表示該對象的作用范圍與ServletContext保持一致>

##自動裝配:
    byName采用屬性的屬性名來完成裝配,首先容器檢查待裝配對象的屬性名,獲取需要裝配的屬性名回到容器中進行查找,如果容器中存在於屬性名一致的對象,那么裝配成功。
    裝配時,即使裝配失敗,也不會拋出任何異常,但是在運行階段,會拋出空指針。    

    byType采用屬性的類型完成裝配,如果屬性類型是接口,那么在容器中查找接口的實現類的實例是否存在,如果存在一個,則調用setter()來完成裝配。如果一個都沒有,裝配失敗。在裝配時,即便失敗了,也不會拋出異常,運行時拋出NullPointException
    如果存在多個,裝配失敗,裝配時拋出異常:NoUniqueBeanDefinitionException,發現多個不知道匹配哪一個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM