學(xué)習(xí)Spring的事務(wù)管理(三)
最后一種方式就是聲明控制的事務(wù)處理了,這里面基本上都是在xml文件中配置,在代碼中見不到任何有關(guān)事務(wù)的類型,實(shí)現(xiàn)了非侵入。其原理用到了Ioc對象反轉(zhuǎn)控制和AOP,到現(xiàn)在我還沒弄清楚Aop是怎么個玩意兒,哈哈,還得好好學(xué)。
在spring的配置文件中設(shè)置一個代理類對象,其中的屬性包括,要代理類的接口,要代理的哪個類,事務(wù)的處理方式,這樣在數(shù)據(jù)實(shí)現(xiàn)類中調(diào)用數(shù)據(jù)庫的方法中就像沒有用事務(wù)一樣寫代碼,另外在控制器中調(diào)用這個處理方法的時候,以前是要通過Ioc獲得一個數(shù)據(jù)實(shí)現(xiàn)類的對象,現(xiàn)在,這個實(shí)現(xiàn)類被代理的,我們只需得到這個代理類的對象,然后用這個代理類的對象調(diào)用相應(yīng)的數(shù)據(jù)處理方法。
Xml配置文件中的部分配置:
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>springmvcwebapp.UserLoginInterface</value>
</list>
</property>
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="target">
<ref bean="oneUserLoginImple"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="doUpdateUserInfo*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>