Spring學習之 簡介
1、Spring 管理的Bean默認是單例的,使用scope="protoType"則爲多實例,但是該Bean對象下的依賴還是單例的。
2、Spring 注入方式:
屬性注入:
<property name="age" value="25"></property>
構造方法注入:(順序+索引)
順序:<constructor-arg type="int" value="25"></constructor>
索引:<constructor-arg index="0" value="25"></constructor>
非靜態工廠方法注入:
<bean id="peopleFactory" classs="com.zhagener.factory.PeopleFactory"></bean>
<bean id="people" factory-bean="peopleFactory" factory-method="creatPeople"></bean>靜態工廠方法注入:
<bean id="people" factory-bean="peopleFactory" factory-method="creatPeople"></bean>
泛型依賴注入:
3、Spring 參數注入方式:
基本類型注入:
<property name="age" value="25"></property>
引用類型注入:
<property name="dog" ref="dog_spring_id"></property >
內部Bean注入:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property><property name="dog"><bean class="com.zhagener.entity.Dog"><property name="name" value="Tom"></property></bean></property ></bean>null值:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhangsan"></property><property name="dog"><null></null></property>
</bean>級聯注入:(級聯注入時,Dog對象必須在People類中實例化)
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property><property name="dog.name" value="Jack2"></property ></bean>
集合注入:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property></bean><property name="dog.name" value="Jack2"></property ><property name="hobbies"><list><value>唱歌</value><value>跳舞</value></list></property><property name="loves"><set><value>唱歌</value><value>跳舞</value></set></property><property name="works"><map><entry><key><value>白天</value></key><value>上班</value></entry><entry><key><value>晚上</value></key><value>睡覺</value></entry></map></property><property name="addresses"><props><prop key="address_1">aaaa</prop><prop key="address_2">bbbb</prop></props></property>
4、Spring 自動裝配的三種方式:
default-autowire="byName"default-autowire="byType"default-autowire="constructor"注意:自動裝配機制慎用,它屏蔽了裝配細節,容易產生潛在的錯誤。
5、Spring 方法注入:
每次People是一個實例,每次Dog也是一個實例的實現方法:1、將People類聲明爲abstract類,將getDog方法聲明爲abstract方法。2、在bean.xml中配置如下:<lookup-method name="getDog" bean="dog"></lookup-method>
6、Spring 方法替換:
7、Spring Bean之間的關係
繼承:
<bean id="abstractpeople" class="com.zhagener.entity.People" abastract="true"><property name="className" value="高三19班"></property><property name="age" value="20"></property></bean><bean id="zhansan" parent="abstractPeople"><property name="id" value="1"></property><property name="name" value="zhansan"></property><property name="age" value="30"></property></bean>依賴:
depend-on="bean_spring_id" 先加載所依賴的對象
引用:
<property name="dog" ref="dog_spring_id"></property>
8、bean 作用範圍:
singleton 容器中僅有一個Bean實例,Bean以單例的方式存在;
prototype 每次從容器中調用Bean時,都返回一個新的實例;
request 每次HTTP請求都會創建一個新的Bean;
session 同一個HTTP Session共享一個Bean;
global session 同一個全局Session共享一個Bean,一般用於portlet應用環境;
application 同一個Application共享一個Bean;
3、加載Spring
ApplicationContext applicationContext = new ClassPathXmlApplication("beans.xml")
applicationContext.getBean(bean_spring_id);