裝配 Spring Bean
Spring 框架基於控制反轉和依賴注入得以實現的自動裝配 Bean 物件的功能,關於裝配 Bean 物件,掌握下圖這 4 個內容就可以了。

_裝配Spring+Bean 1.png
依賴注入的三種方式
物件交給 Spring 進行建立了,但是屬性如何初始化呢?Spring 初始化 Bean 物件屬性有三種方式如下圖:

_依賴注入的三種方式.png
構造器注入
使用方式要滿足兩點:
- 在 Bean 類中提供對應的建構函式
public Car(String name, Double price) { this.name = name; this.price = price; }
- 在 XML 檔案中進行構造方法屬性的配置
<!-- 屬性注入的方式:建構函式注入,(其他型別物件也是可以的哦) --> <bean id="car" class="com.itheima.spring.demo4.Car"> <constructor-arg name="name" value="BMW"/> <constructor-arg name="price" value="2383890"/> </bean>
使用 setter 注入
使用方式要滿足兩點:
- 在 Bean 類中提供屬性和對應的 setter 方法
private String name; public void setName(String name) { this.name = name; }
- 在 XML 檔案中提供屬性的配置
<bean id="userDao" class="com.itheima.spring.demo1.UserDAOImpl"> <property name="name" value="keqi"></property> </bean>
這種方式靈活性更高,通常都是使用這種方式!
介面注入
通常都是用這種方式從外界系統中獲得資源,Spring 中用的不多。比如 JavaWeb 中的 request
和 response
內建物件,就是通過介面注入的方式得到的。
XML 裝配 Bean 的方式

_XML裝配Bean.png
Bean 類的配置
<bean id="userDao" class="packageName.UserDAOImpl"> </bean>
普通屬性的配置
基本資料型別和 String 型別的字串都是這樣配置的
<bean id="userDao" class="packageName.UserDAOImpl"> <property name="name" value="keqi"/> </bean>
其他型別的物件
其他型別的物件要用 ref
屬性指定,值就是其他 Bean 物件的 id
屬性。
<bean id="employee" class="packageName.Employee"> <property name="name" value="keqi"/> <!-- 引用其他物件,用ref引用就可以了哦 --> <property name="car2" ref="car2"/> </bean>
集合屬性的配置
如果某個屬性是集合型別的,只要在 property
屬性下加上對應集合型別的標籤即可。
- List 集合&陣列集合
<property name="list"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property>
- Map 集合
<property name="map"> <map> <entry key="aaa" value="111"/> <entry key="bbb" value="222"/> <entry key="ccc" value="333"/> </map> </property>
- Set 集合
<property name="set"> <set> <value>aaa</value> <value>bbb</value> <value>ccc</value> </set> </property>
Bean生命週期&作用範圍的配置
指定生命週期的方法和類物件的作用範圍如下
<bean id="customerDAO" class="packageName.CustomerDAOImpl" init-method="setup" destroy-method="destroy" scope="prototype"> </bean>
註解配置 Bean 的方式
Spring 開發中通常都是用的註解來配置 Bean 類的,這種方式開發更快捷。

_註解配置Bean.png
Bean 類的註解
表示一個類交給 Spring 進行管理用的是 @Component
註解。但是通常用的是它衍生初的另外三個註解,這樣看到註解就能夠知道這個類在三層架構中處於什麼位置。
@Controller @Service @Repository
Bean 屬性的註解
Bean 類的屬性分為普通屬性和物件型別的屬性。記住下面兩個註解就可以了:
@Value @Resource
Bean 生命週期的註解
因為 Bean 物件是由 Spring 進行管理的,所以它和 Servlet 類一樣,也有所謂的生命週期方法。
一個是初始化方法,Bean 物件建立後立即執行此方法,另一個是銷燬方法,Bean 物件銷燬之前會執行此方法。分別使用以下兩個註解來描述對應的方法:
@PostCOnstruct @PreDestroy
Bean 作用範圍的註解
Bean 物件是有作用範圍概念的,在 WEB 應用中,Bean 物件可以作為 request
或者 session
內建物件的屬性存在。同時還需要指定它建立的方式,是保證單例建立,還是多例建立。用 @Scope
屬性來描述類,他有以下 4 個屬性:
singleton prototype request session
XML&註解混合配置Bean
註解開發快速,後期不好維護,XML 後期好維護,開發繁瑣。所以通常也會結合他們的優點,兩者混合使用來配置 Bean 。原則就是,類用 XML 描述,屬性用註解描述。