1:bean的基本屬性配置:
<!-- id是bean的標識符,必須唯一,如果沒有配置id,name默認為標識符 如果配置了id,有配置了name,那么name為別名 name可以設置多個別名,分隔符可以是空格 逗號 分號 class是bean的全限定名,即包名加類名 如果不配置id和name,那么可以根據applicationContext.getbean(Class)獲取對象,
scope:bean的作用域,
取值:singleton:單例的,整個容器只產生一個對象,默認是單例
prototype:原型,每次獲取bean都創建一個新對象
request:每次請求時創建一個新的對象
session:在一個會話范圍內只產生一個對象
application:在應用范圍內是一個對象
autowire:自動裝配 用於簡化spring的配置
取值:byname:根據名稱(根據set方法中set后面的內容)去查找相應的bean,發現了則裝載上
bytype:根據類型自動裝配,不用去管id,但同一種類型的bean只能有一個,f否則報錯
constructor,當通過構造器注入實例化bean時,裝配構造方法
-->
<bean id="userMysqlDaoImpl" class="com.wang.dao.impl.UserMysqlDaoImpl"></bean>
<bean id="userOracleDaoImpl" class="com.wang.dao.impl.UserOracleDaoImpl"></bean>
<bean id="service" class="com.wang.service.UserService">
<property name="userDao" ref="userOracleDaoImpl"></property>
</bean>
注意:
在整合struts和hibernate框架時,需要將action的scope設為"prototype".
可以配置全局的自動裝配類型,在beans內,設置default-autowire="...";
2,團隊協作開發(import標簽):
<!--可以讀取到其他配置的xml,如果在當前目錄下,直接寫文件名,如果是在其他目錄下,要寫完整包名,以"/"分隔-->
<import resource="beans1.xml"/>
3:bean的繼承(parent屬性):
如果car1和car2對象同屬於類Car,在配置文件中,他們之間就可以使用parent屬性來簡化代碼:
<bean id="car1" class="com.wang.entity.Car">
<property name="brand" value="Audi"/>
<property name="price" value="1000000"/>
</bean>
<bean id="car2" parent="car1">
<property name="price" value="3000"></property>
</bean>
這樣的配置,car2就繼承了car1中的class屬性和brand的屬性.簡化了代碼,car1稱為父bean,car2稱為子bean.car2可以覆蓋從car1繼承過來的屬性,比如price.
4.抽象bean(abstract屬性):
當在bean標簽中設置屬性abstract="true",即指定該bean為抽象bean,不會被實例化,一般僅供被其他的bean繼承.
抽象bean,可以不指定class屬性,而是在繼承它的子Bean中設置class屬性.
5.bean的關聯(depend-on屬性):
要求在配置類A的bean時,必須有一個關聯的類B的bean,換句話說類A的bean依賴於類B的bean,這時可以在類A的bean標簽中設置depend-on="bBean".
這樣設置的話,類B的bean會先初始化,
6.使用外部屬性文件
在配置文件中配置Bean時,有時候需要在bean的配置里混入一些系統部署的細節信息(例如文件路徑,數據源配置信息),而這些部署細節實際上需要和bean配置相分離.
在配置c3p0數據源連接池時,我們可以這樣寫:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="root"></property>
<property name="password" value="123"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
<!-- <property name="initPoolSize" value="3"></property> <property name="maxPoolSize" value="10"></property> -->
</bean>
為了使數據庫配置信息和spring的配置文件分離,便於維護,更好的方法是這樣:
在src目錄下,新建一個db.properties文件,,內容如下:
jdbc.user=root
jdbc.password=123
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernatejdbc.initialPoolSize=5
jdbc.maxPoolSize=10
在beans.xml中:
<!-- 導入資源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置c3p0連接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<!-- <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property> -->
</bean>
注意使用context的標簽,需要在頭文件中添加支持context的信息,這里不再給出.
7.管理bean的生命周期:
SpringIOC容器可以管理bean的生命周期,在Bean生命周期的特定點執行定制的任務.
在bean標簽中有<init-method>和<destory-method>,為bean指定初始化和銷毀方法.當設置了這兩個屬性后,bean的生命周期是這樣的:
創建bean實例->為bean的屬性設置值,或對其他bean進行引用->調用bean的初始化方法->根據需要調用bean自己的方法(使用bean)->容器關閉時,調用bean的銷毀方法.