我配置spring事务为什么不起作用

application.xml 配置-------------------------------

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="merge*">PROPAGATION_REQUIRED</prop>

<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
service 配置------------------
<bean id="loginService" parent="txProxyTemplate"> 
<property name="target"> 
<bean 
class="com.play.login.service.impl.LoginServiceImpl"> 
<property name="loginDao" ref="loginDao" />
</bean> 
</property> 
</bean>

开心每一天1111
浏览 1535回答 2
2回答

达令说

事务直接配到DAO上<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><bean id="baseTxProxy"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"lazy-init="true" abstract="true"><property name="transactionManager"><ref bean="transactionManager" /></property><property name="transactionAttributes"><props><prop&nbsp;key="update*">PROPAGATION_REQUIRED</prop></props></property></bean><bean id="studentDaoProxy" parent="baseTxProxy"><property name="target"><ref bean="studentDao" /></property></bean><bean id="studentDao" class="com.dao.StudentDaoImpl"><property name="dataSource" ref="dataSource" /></bean>StudentDao st = (StudentDao) context.getBean("studentDaoProxy");两个bean也可以合并为<bean id="studentDao" parent="baseTxProxy"><property name="target"><bean class="com.dao.StudentDaoImpl"><property name="dataSource" ref="dataSource" /><property name="kpiDao" ref="kpiDao" /></bean></property></bean>StudentDao st = (StudentDao) context.getBean("studentDao");上述这种方式必须使用接口,为什么。第二种同样必须用接口。配置起来比第一种麻烦<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><prop&nbsp;key="update*">PROPAGATION_REQUIRED</prop></props></property></bean><bean id="studentDaoProxy"class="org.springframework.aop.framework.ProxyFactoryBean"><property name="target" ref="studentDao" /><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean><bean id="studentDao" class="com.dao.StudentDaoImpl"><property name="dataSource" ref="dataSource" /></bean>ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");StudentDao st = (StudentDao) context.getBean("studentDaoProxy");如果使用的都是接口,那么就不需要用cglib-nodep-2.1_3.jar如果service调dao没有用到接口,那么必须用cglib-nodep-2.1_3.jar
打开App,查看更多内容
随时随地看视频慕课网APP