1. 程式人生 > >JavaEE框架---Spring---配置xml方式

JavaEE框架---Spring---配置xml方式

Spring Bean的作用域

     在Spring2.0之前bean只有2種作用域即:singleton(單例)non-singleton(也稱prototype, Spring2.0以後,增加了sessionrequestglobal session三種專用於Web應用程式上下文的Bean

     因此,預設情況下Spring2.0現在有五種型別的Bean。當然,Spring2.0Bean的型別的設計進行了重構,並設計出靈活的Bean型別支援,理論上可以有無數多種型別的Bean,使用者可以根據自己的需要,增加新的Bean型別,滿足實際應用需求。

1singleton單例項

當一個bean的作用域設定為singleton, 那麼Spring IOC容器中只會存在一個共享的bean例項,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。換言之,當把一個bean定義設定為singleton作用域時,Spring IOC容器只會建立該bean定義的唯一例項。這個單一例項會被儲存到單例快取(singleton cache)中,並且所有針對該bean的後續請求和引用都將返回被快取的物件例項

<bean id="userdao" class="com.bean.UserDao" scope="singleton"/>

<bean id=" userdao " class=" com.bean.UserDao " singleton="true"/> 

UserDao bean1=( UserDao)factory.getBean("userdao");

UserDao bean2=( UserDao)factory.getBean("userdao");

2prototype多例項  

每個Spring容器中,一個bean對應多個例項. prototype作用域部署的bean每一次請求(將其注入到另一個bean中,或者以程式的方式呼叫容器的getBean()方法)都會產生一個新的bean

例項,相當一個new的操作

<bean id="userdao" class="com.bean.UserDao"  scope="prototype"/>

<bean id=" userdao " class=" com.bean.UserDao " singleton="false"/> 

 UserDao bean1=( UserDao)factory.getBean("userdao");

 UserDao bean2=( UserDao)factory.getBean("userdao");

Bean1bean2的引用不相同。每次使用getBean()重新產生一個例項

3request   

request表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效

    <bean id="userdao" class="com.bean.UserDao" scope="request"/>

4session    

      session作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效.

Spring自動裝配

     SpringIOC容器通過Java反射機制瞭解了容器中所存在Bean的配置資訊,這包括建構函式方法的結構屬性的資訊,而正是由於這個原因Spring容器才能夠通過某種規則來對Bean進行自動裝配,而無須通過顯式的方法來進行配製。

 1byName

通過屬性的名字的方式查詢JavaBean依賴的物件併為其注入。比如說類Computer有個屬性printer指定其autowire屬性為byName後,Spring IoC容器會在配置檔案中查詢id/name屬性printerbean,然後使用Setter方法為其注入。

2 byType

通過屬性的型別查詢JavaBean依賴的物件併為其注入。比如類Computer有個屬性printer,型別為Printer,那麼,指定其autowire屬性為byType後,Spring IoC容器會查詢Class屬性為Printerbean,使用Setter方法為其注入。

Spring Bean常見的xml配置方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	
	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
	http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
	">
	<bean id="myDate" class="cn.hncu.ioc.v3.domain.MyDate">
		<property name="date" value="2000-10-04" />
	</bean>
	
	<bean id="p" class="cn.hncu.ioc.v3.domain.Person">
		<!-- 基本資料型別和Sting型別資料的注入  通過 value屬性/value子標籤-->
		<property name="name">
			<value>張三</value>
		</property>
		<property name="age" value="18"/>
		
		<!-- 自定義的類物件的注入  通過 ref屬性/ref子標籤-->
		<property name="birth" ref="myDate" />
		
		<!-- 注入 集合  -->
		<property name="list" >
			<list>
				<value>312</value>
				<value>123</value>
				<value>劉備</value>
			</list>
		</property>
		
		<property name="set" >
			<!-- 不用預設的 java.util.LinkedHashSet類 採用自定義類,其他集合類似 -->
			<bean class="java.util.HashSet"	>
				<constructor-arg>
					<list>
						<value>312</value>
						<value>劉備</value>
						<value>123</value>
					</list>
				</constructor-arg>
			</bean>
		</property>
		
		<property name="map">
			<map>
				<entry key="Tom" value="Jack"/>
				<entry key="張飛" value="關羽"/>
				<!-- 可以引用物件 -->
				<entry key="時間" value-ref="myDate"/>
			</map>
		</property>
		
		<property name="objs">
			<array>
				<!-- 引用物件 -->
				<ref bean="myDate"/>
				<!-- 匿名內部bean -->
				<bean class="java.util.HashMap">
					<constructor-arg>
						<map>
							<entry key="hello" value="你好" />
						</map>
					</constructor-arg>
				</bean>
			</array>
		</property>
		
	</bean>
	
</beans>