Spring-----基礎篇

  1. IOC的理解:便是"控制反轉",它不是什麼技術,而是一種設計思想。反轉是指得到對象的過程反轉了,傳統的狀況下,咱們獲取所需對象的方法是new一個對象,而IOC則是將得到對象的過程交給容器控制,再也不由類控制類的建立,這樣作可使咱們系統的耦合度不這麼高,咱們只需將重心放在如何實現業務邏輯上,而不是在建立對象的過程上。(控制反轉分爲兩種:依賴注入(DI)和依賴查找(DL))
  • 控制」指的是指對對象的建立、維護、銷燬等生命週期的控制,這個過程通常是由咱們的程序主動去控制的,如使用new關鍵字去建立一個對象(建立),在使用過程當中保持引用(維護),在失去所有引用後由GC去回收對象(銷燬)。
  • 反轉」是指將指的是指對對象的建立、維護、銷燬等生命週期的控制這個過程交由IOC容器控制,須要某個對象的時候就能夠直接去IOC容器中獲取,能夠將工做重心放在業務邏輯中,不須要考慮類之間的依賴關係。
  1. DI的理解:即「依賴注入」,在IOC容器建立Bean的過程當中,會將對應的依賴關係同時注入到Bean中,是IOC實現的其中的一種方法,也是最經常使用的方法。

3.Spring中兩個核心的容器web

(1)BeanFactory 容器緩存

  • 是IOC容器的核心接口,Spring使用BeanFactory來實例化、配置和管理Bean。(其主要定義了getBean方法,getBean方法是IOC容器獲取對象的入口)
  • BeanFactory只能管理單例(Singleton)Bean的生命週期,而不能管理例如原型模式(prototype)的生命週期,覺得原型Bean在建立後就傳給了客戶端,容器失去了對他們的引用。
  • 最多見的實現類是XmlBeanFactory,能夠從文件系統或者classpath中獲取資源。(注意:經過BeanFactory啓動IOC容器時,並不會初始化配置文件中定義的Bean,初始化動做發生在第一個調用前,由於對於單例Bean,BeanFactory戶緩存Bean實例,因此第二次使用getBean獲取Bean時直接從IOC容器緩存中獲取Bean)

(2)ApplicationContext 容器框架

  • BeanFactory 接口提供了配置框架及基本功能,可是沒法支持Spring的aop功能和web功能,而ApplicationContext接口做爲BeanFactory的派生,於是提供BeanFactory全部的功能。spa

  • ApplicationContext還會額外提供如下的功能:prototype

    (1)MessageSource, 提供國際化的消息訪問設計

    (2)資源訪問,如URL和文件對象

    (3)事件傳播特性,即支持aop特性繼承

    (4)載入多個(有繼承關係)上下文 ,使得每個上下文都專一於一個特定的層次,好比應用的web層接口

  • ApplicationContext:是IOC容器另外一個重要接口, 它繼承了BeanFactory的基本功能, 同時也繼承了容器的高級功能,如:MessageSource(國際化資源接口)、ResourceLoader(資源加載接口)、ApplicationEventPublisher(應用事件發佈接口)等。生命週期

(3)二者的區別

  1. BeanFactory採用的是延遲加載的形式來注入Bean的,只有在使用到某個Bean的時候纔會加載實例化該Bean。而ApplicationContext則相反,它是在容器啓動時,一次性建立了全部的Bean,這樣,咱們就能夠在容器啓動階段中就能夠發現是否有配置錯誤的狀況,而BeanFactory則不能。一般狀況下,咱們會選擇使用ApplicationContext,咱們須要某個Bean的時候能夠直接使用,不用建立,由於其已經建立好了。
  2. BeanFactory主要是面對Spring框架內部,而ApplicationContext面對的是Spring使用的開發者。
  3. BeanFactory和ApplicationContext都支持BeanPostProcessor(Spring容器完成Bean的實例化,配置和其餘的初始化後添加一些本身的邏輯處理,咱們就能夠定義一個或者多個BeanPostProcessor接口的實現),不過在BeanFactory中得自行配置,而ApplicationContext已經自動注入了。
相關文章
相關標籤/搜索