最后一种方式就是声明控制的事务处理了,这里面基本上都是在xml文件中配置,在代码中见不到任何有关事务的类型,实现了非侵入。其原理用到了Ioc对象反转控制和AOP,到现在我还没弄清楚Aop是怎么个玩意儿,哈哈,还得好好学。
在spring的配置文件中设置一个代理类对象,其中的属性包括,要代理类的接口,要代理的哪个类,事务的处理方式,这样在数据实现类中调用数据库的方法中就像没有用事务一样写代码,另外在控制器中调用这个处理方法的时候,以前是要通过Ioc获得一个数据实现类的对象,现在,这个实现类被代理的,我们只需得到这个代理类的对象,然后用这个代理类的对象调用相应的数据处理方法。
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>
没有评论:
发表评论