一.声明式事务配置:
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="add*" propagation="REQUIRED" read-only="false"/>
- <tx:method name="del*" propagation="REQUIRED" read-only="false"/>
- <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
- <tx:method name="mod*" propagation="REQUIRED" read-only="false" />
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:pointcut id="serviceMethods" expression="execution(public * com.lexing.platform.service.*.*(..))" />
- <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
- </aop:config>
二.声明式事务失效,原因
根本原因:由子容器扫描装配了@Service 注解的实例。
spring的context是父子容器,由ServletContextListener 加载spring配置文件产生的是父容器,springMVC加载配置文件产生的是子容器,子容器对Controller进行扫描装配时装配了@Service注解的实例 (@Controller 实例依赖@Service实例),而该实例理应由父容器进行初始化以保证事务的增强处理,所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力。
三.解决办法
1.spring配置文件applicationContext中:
- <!-- 不扫描带有@Controller注解的类 ,让 springMVC 子容器加载。
- <context:component-scan base-package="com.lexing.platform">
- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
- </context:component-scan>
2.springMVC配置文件 servlet-context.xml中
- <!-- 将 带有 @Service注解的类,交由spring 父容器实例化,[ @Service实例依赖@Repository实例,故spring父容器也会装配<span style="font-family: Arial, Helvetica, sans-serif;">@Repository 实例</span><span style="font-family: Arial, Helvetica, sans-serif;">]</span>
- <context:component-scan base-package="com.lexing.platform">
- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
- </context:component-scan>
- 本文来源于:http://blog.csdn.net/z69183787/article/details/37819627
相关推荐
Spring+SpringMVC配置事务管理无效原因及解决办法详解 Spring 框架是 Java 企业级应用程序的核心框架,提供了事务管理机制,以确保业务逻辑的原子性和一致性。然而,在使用 Spring 和 SpringMVC 配置事务管理时,...
声明式事务失效的方法 在 Spring 框架中,声明式事务是指通过配置文件或注解来定义事务边界的方式。这种方式可以使得事务管理变得更加灵活和可靠。但是,在使用 Spring+SpringMVC 组合开发时,声明式事务可能会失效...
"spring与springmvc常见面试题" Spring 是一个流行的 Java Web 应用框架,提供了 ...(不推荐使用)2、声明式事务,在配置文件中配置(推荐使用)声明式事务又分为两种:基于注解的声明式事务和基于 XML 的声明式事务。
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...
在Spring MVC中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改代码...综上所述,Spring MVC结合AOP为我们提供了一种优雅的方式,以声明式地管理和记录Controller层的日志,增强了系统的可观察性和稳定性。
声明式事务管理更易于维护,只需在配置文件或注解中声明事务属性,而无需在业务代码中显式控制事务开始和结束。 2. **AspectJ**:AspectJ是一个强大的AOP框架,它允许开发者定义“切面”,即关注点的模块化,如日志...
Spring Cloud组件如Zuul(API网关)、Feign(声明式服务调用)等,与Dubbo相比更注重整体微服务生态。 以上只是部分面试题目的解析,实际面试中,面试官可能会结合具体项目经验和技术深度进行深入探讨。程序员在...
- Spring 使用 AOP 和声明式事务管理。 - 支持多种事务管理器,如 JTA、JDBC、Hibernate 等。 7. **Spring容器启动流程** - 加载配置文件。 - 创建 BeanFactory。 - 注册后处理器。 - 初始化 Bean。 8. **...
- **实现方式**:懒汉式、饿汉式、双重检查锁定等。 ##### 解析XML文件的几种技术 - **DOM (Document Object Model)**:将XML文档转化为树形结构。 - **SAX (Simple API for XML)**:基于事件驱动模型。 - **StAX ...