spring實戰學習之裝配bean

依賴注入:讓各個模塊保持鬆散耦合

AOP面向切面編程:各個組件負責特定核心功能,不需要考慮事務,日誌,安全等系統服務功能,AOP將這些每個模塊都需要考慮的服務模塊化,並以聲明的方式將它們應用到它們需要影響的組件模塊中去,使得各個業務模塊更多關注自身業務,無需瞭解系統服務功能。使POJO保持簡單。

一.spring裝配bean之基於xml文件配置的方式

創建應用對象之間的協作關係的行爲通常被稱爲裝配。spring容器提供了兩種配置bean的方式:xml文件配置方式,基於java註解的配置方式。

1.1創建spring的配置,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean declaratuion go here   在<beans>元素內,放置所有Spring的配置 -->
</beans>

1.2聲明簡單的bean:可以通過構造器方法和工廠方法創建bean。

構造器方法:spring容器加載bean時,調用默認的構造器實例化。

<bean id="demoBean"   class="com.demo.client.DemoBean" />

構造器方法:聲明指定構造方法通過構造器注入參數的值。通過<constructor-arg>元素來告訴spring額外的信息。

<bean id="demoBean"   class="com.demo.client.DemoBean" >
    <constructor-arg value="param的值" />
    <constructor-arg ref="param爲具體某個自定義類型,即某個聲明的bean的id" />
</bean>

舉個例子:

<bean id="demoBean"   class="com.demo.client.DemoBean" >
    <constructor-arg value="10" />
    <constructor-arg ref="demoId" />
</bean>
<bean id="demoId"   class="com.demo.client.DemoParam" />

注意:對於非簡單類型,比如自定義類型,spring使用ref屬性來將指定Id的Bean引用傳遞給構造器。

工廠方法:針對於無公開構造方法的bean

<bean id="demoId"   
            class="com.demo.client.DemoParam" 
            factory-method="類的靜態方法" />

1.3 bean的作用域

<bean id="demoId"   
            class="com.demo.client.DemoParam" scope="prototype" />

singleton

在每一個Springle容器中,一個bean定義只有一個對象實例(默認)  

prototype

允許bean的定義可以被實例化任意次(每次調用都創建一個實例)

request

在一次Http請求中,每個bean定義對應一個實例,該作用域僅在基於web的spring上下文中才有效

session

在一個Http Session請求中,每個bean定義對應一個實例,該作用域僅在基於web的spring上下文中才有效

global-session

在一個全局Http Session請求中,每個bean定義對應一個實例,該作用域僅在portlet上下文中才有效

1.4 初始化和銷燬bean

<bean id="demoId"   
            class="com.demo.client.DemoParam" scope="prototype"
            init-method="Bean實例化後立即調用初始化指定的方法"
            destory-method="Bean從容器中移除和銷燬前,調用的方法"/>

此外,還有默認的init-method和destory-method。比如在上下文定義中有很多Bean都擁有相同名字的初始化方法和銷燬方法。此時沒有必要爲每一個bean聲明init-method和destory-method。可以使用<beans>元素的default-init-method和default-destory-method屬性。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans.xsd">
default-init-method=“Bean實例化後立即調用初始化指定的方法”
default-destory-method=“Bean從容器中移除和銷燬前,調用的方法”
</beans>

default-init-method和default-destory-method屬性分別爲應用上下文中所有bean設置了共同的初始化方法和銷燬方法。

1.5注入bean屬性

使用<property>元素配置Bean屬性,通過setter方法注入值。與<constructor-arg>類似,只是<constructor-arg>通過構造參數注入值。

<bean id="demoId"   
            class="com.demo.client.DemoParam" scope="prototype" 
           <property name = "key" value="the key value">
            <property name = "demoParam (DemoParam類型的屬性名,比如這裏是demoParam)" ref="demoId">
</bean>

使用spring命名空間p裝配屬性。在spring的xml配置中增加聲明:xmlns:p="http://www.springframework.org/schema/p"

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
<bean id="demoId"   
            class="com.demo.client.DemoParam" scope="prototype" 
           p : key="the key value"
             p : demoParam-ref = "the key value" />

-ref後綴作爲一個標識來告知spring應該裝配一個引用而不是字面值。

使用表達式裝配SpEL

它通過運行期執行的表達式將值裝配到bean的屬性或者構造參數中。在<property>元素中的value屬性中使用#{}界定符把這個值裝配到bean的屬性值。

 

1.6裝配集合

spring提供了4種類型的集合配置元素。

<list>

裝配list類型的值,可重複

<set>

裝配set類型的值,不可重複

<map>

裝配map類型的值,名稱和值可以爲任意類型

<props>

裝配properties類型的值,名稱和值必須是string類型

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章