基於tx/aop配置的聲明式事務管理是實際開發中最經常使用的事務管理方式之一。
在「Spring3事務管理——使用原始的TransactionProxyFactoryBean」代碼基礎上修改applicationContext.xml。
配置以下:
spring
<!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource"> </bean> <!-- 經過AOP配置提供事務加強,讓service包下全部Bean的全部方法擁有事務 --> <aop:config proxy-target-class="true"> <aop:pointcut id="serviceMethod" expression=" execution(* net.yingyi.games.service..*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> </tx:attributes> </tx:advice> <!-- 定義JdbcTemplate的Bean --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"> </bean> <!-- 須要實施事務加強的目標業務Bean --> <bean id="userScore" class="net.hingyi.springDemo.transaction.service.UserScoreServiceImpl" p:userScoreRepository-ref="userScoreRepository_jdbc" /> <bean id="userScoreRepository_jdbc" class="net.hingyi.springDemo.transaction.repository.UserScoreRepositoryImpl" p:jdbcTemplate-ref="jdbcTemplate" />
上面的代碼中,咱們能夠看到不一樣的角色:經過tx/aop定義的聲明式事務配置信息、業務Bean、Spring容器。Spring容器自動將「經過tx/aop定義的聲明式事務配置信息」應用於「業務Bean」,從容器中返回的業務Bean已是被織入事務加強的代理Bean,即「經過tx/aop定義的聲明式事務配置信息」和「業務Bean」在配置時不直接管理。 express