一. 利用TransactionProxyFactoryBean生成事務代理
採用這種方式的配置時候,配置文件的增加非常快,每個bean有需要兩個bean配置,一個目標,另外還需要使用TransactionProxyFactoryBean配置一個代理bean。
這是一種最原始的配置方式,下面是使用TransactionProxyFactoryBean的配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!-- Spring配置文件的文件頭,包含DTD等信息-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"[url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">
<beans>
<!--定義數據源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 定義數據庫驅動-->
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<!-- 定義數據庫url-->
<property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
<!-- 定義數據庫用戶名-->
<property name="username"><value>root</value></property>
<!-- 定義數據庫密碼-->
<property name="password"><value>32147</value></property>
</bean>
<!--定義一個hibernate的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 定義SessionFactory必須注入DataSource-->
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list>
<!--以下用來列出所有的PO映射文件-->
<value>Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!--此處用來定義hibernate的SessionFactory的屬性:
不同數據庫連接,啓動時選擇create,update,create-drop-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 定義事務管理器,使用適用於Hibernte的事務管理器-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- HibernateTransactionManager bean需要依賴注入一個SessionFactory bean的引用-->
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!--定義DAO Bean , 作爲事務代理的目標-->
<bean id="personDaoTarget" class="lee.PersonDaoHibernate">
<!-- 爲DAO bean注入SessionFactory引用-->
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!-- 定義DAO bean的事務代理-->
<bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 爲事務代理bean注入事務管理器-->
<property name="transactionManager"><ref bean="transactionManager"/></property>
<!-- 設置事務屬性-->
<property name="transactionAttributes">
<props>
<!-- 所有以find開頭的方法,採用required的事務策略,並且只讀-->
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<!-- 其他方法,採用required的事務策略 ->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<!-- 爲事務代理bean設置目標bean -->
<property name="target">
<ref local="personDaoTarget"/>
</property>
</bean>
</beans>
在上面的配置文件中,personDao需要配置兩個部分,一個是personDao的目標bean,該目標bean是實際DAO bean,以實際的DAO bean爲目標,建立事務代理。一個組件,需要來個bean組成,一個目標bean,一個事務代理。
這種配置方式還有一個壞處:目標bean直接暴露在Spring容器中,可以直接引用,如果目標bean被誤引用,將導致業務操作不具備事務性。
爲了避免這種現象,可將目標bean配置成嵌套bean,下面是目標bean和事務代理的配置片段:
<!-- 定義DAO bean的事務代理-->
<bean id="personDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 爲事務代理bean注入事務管理器-->
<property name="transactionManager"><ref bean="transactionManager"/></property>
<!-- 設置事務屬性-->
<property name="transactionAttributes">
<props>
<!-- 所有以find開頭的方法,採用required的事務策略,並且只讀-->
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<!-- 其他方法,採用required的事務策略 ->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<!-- 爲事務代理bean設置目標bean -->
<property name="target">
<!-- 採用嵌套bean配置目標bean-->
<bean class="lee.PersonDaoHibernate">
<!-- 爲DAO bean注入SessionFactory引用-->
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</property>
</bean>
利用TransactionProxyFactoryBean生成事務代理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Linux基本操作命令
wbzjacky
2019-02-24 13:12:38
真實的模擬***綜合實驗
wbzjacky
2019-02-24 13:12:37
三層交換機的HSRP、vlan、端口聚合
wbzjacky
2019-02-24 13:12:37
HSRP和二層交換機的端口聚合、vlan
wbzjacky
2019-02-24 13:12:37
如果同事暗中傷害你,應該怎麼辦?
這個饅頭有餡
2019-02-24 13:59:08
職場中,抱怨越多的員工,越被領導瞧不起!
這個饅頭有餡
2019-02-24 13:59:08
老程序員被裁,應屆生卻能月薪 1.3 萬?這你能忍?
前端高達
2019-02-24 13:48:04
遇到到處蹭吃卻從不請客吃飯的主怎麼辦?
樑軍年
2019-02-24 13:26:35
高標準機房綜合配線安裝
wbzjacky
2019-02-24 13:12:38
IPsec ***實驗
wbzjacky
2019-02-24 13:12:37
CISCO路由AAA的Easy ***
wbzjacky
2019-02-24 13:12:37
CISCO訪問控制列表 企業網絡管理的必殺技
wbzjacky
2019-02-24 13:12:37