2 回答
TA贡献1821条经验 获得超6个赞
事务直接配到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 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 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
- 2 回答
- 0 关注
- 1572 浏览
添加回答
举报