天天看點

Spring-依賴注入簡介與xml配置1.獲得2.生成bean3.注入bean4.自動裝配5.進階xml特性

spring核心是依賴注入。本質就是通過配置xml檔案或注解來自動生成你需要的對象,放在spring的大容器中。

spring是一個獨立的架構,既可以用在java SE項目中,也可以用在 Web項目中。程式先建立bean容器,再調用bean容器的getBean()方法來擷取Spring容器中的bean。

會得到多個依賴的jar,見下圖。

Spring-依賴注入簡介與xml配置1.獲得2.生成bean3.注入bean4.自動裝配5.進階xml特性

圖1-1 spring的依賴jar

這裡的bean類似于JavaBean,但範圍要寬的很多。spring就像一個大容器,幫我們建立好對象後放入了它的容器。所有由它建立的對象,都叫bean。

bean的作用域:

singleton

每次調用getBean(),都傳回同一個對象;

prototype

每次調用getBean(),都傳回新的對象;

request 針對每次HTTP請求,Web應用中才有效。

org.springframework.beans.factory.BeanFactory

接口。它是一個容器,spring生成的bean存放在它的實作類中。主要有下面幾個方法。

Object org.springframework.beans.factory.BeanFactory.getBean(String name)

根據名字拿到bean對象。

<T> T org.springframework.beans.factory.BeanFactory.getBean(String name, Class<T> requiredType) 

getbean()的重載。

org.springframework.context.ApplicationContext

接口,,BeanFactory的子接口。

生成ApplicationContext的構造函數有:

FileSystemXmlApplicationContext 從目前項目位置算起,即src/目錄的上層目錄。

ClassPathXmlApplicationContext 從classes/開始算起。例子:

Spring-依賴注入簡介與xml配置1.獲得2.生成bean3.注入bean4.自動裝配5.進階xml特性

圖2-1 bean配置檔案的位置

可以讓spring讀取我們的.properties檔案。例子見下,注意用到的是org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。

占位

當執行個體化一個bean時,可能需要執行一些初始化操作來確定該bean處于可用狀态;同樣地,當不再需要bean,将其從容器中移除時,我們還可能按順序執行一些清除工作。此時我們需要init-method與destroy-method屬性。

兩種注入

設值注入:通過<property .../>元素驅動spring執行setter方法。

構造注入:通過<constructor-arg.../> 元素驅動Spring執行帶參數的構造函數。

需要在bean類中實作所有private字段的setter方法。下面是示例spring配置。

為了簡化xml配置,spring提供了四種自動裝配機制。

byName:把與bean的屬性同名的其他bean,自動裝配到對應屬性中;若找不到,不裝配。

byType:把與bean的屬性同類型的其他bean,自動裝配到對應屬性中;若找不到,不裝配。

constructor :把與bean的構造函數形參同類型的其他bean,自動裝配到對應屬性中;若找不到,不裝配。

autodetect:嘗試constructor裝配,若失敗,采用byType裝配。