`
uule
  • 浏览: 6353011 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

spring mvc 给action添加事务不成功的原因

 
阅读更多
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
    </context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


<!-- Handles Spring requests -->
    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 

 

 

1、在主容器中(applicationContext.xml),将Controller的注解排除掉
<context:component-scan base-package="com">
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

而在springMVC配置文件中将Service注解给去掉
<context:component-scan base-package="com">
  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
  </context:component-scan>

因为spring的context是父子容器,所以会产生冲突,由ServletContextListener产生的是父容 器,springMVC产生的是子容器,子容器Controller进行扫描装配时装配了@Service注解的实例,而该实例理应由父容器进行初始化以 保证事务的增强处理,所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力。

还有一种方式是将service层改用xml配置,其实这样做也是变相的让springmvc无法扫描service,而只能依赖父窗口也就是ServletContextListener来进行初始化,这样同样被赋予了事务性。

 

2、自己单独做了个小网站 但是发现action事务不起作用了 但是如果用service层就没问题 找了很多办法没解决 最后自己解决了

其实就是一个加载顺序的问题
首先使用了spring MVC的项目是不需要配置action bean  而是通过spring mvc的配置文件进行扫描注解加载的
spring事务配置文件还有上下文都是通过org.springframework.web.context.ContextLoaderListener加载的,
而spring MVC的action是通过org.springframework.web.servlet.DispatcherServlet加载的
这样就有个优先级的问题了  web是先启动ContextLoaderListener后启动DispatcherServlet
在ContextLoaderListener加载的时候action并没在容器中,所以现在使用AOP添加事务或者扫描注解都是无用的。
那么解决办法就是在DispatcherServlet 加载spring-MVC配置文件后再进行一次AOP事务扫描和注解事务扫描就OK了

<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:config> 
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/> 
</aop:config>
 
至于为什么要在Action中加事务

 spring in action 一书中也说过 service dao action 是很经典的组合但不是必须的,对于一个简单的增删改查系统,没必要分那么多层,比如一个简单保存功能 无非就new 一个实体 映射参数 使用了spring jdbcTemplate 保存就一行代码 就一个这么简单的功能有必要 一个service接口 一个service实现类 一行代码调用一个dao接口一个dao实现类  要多建四个类 还要在spring上下文中配置  不累吗?  对于一个简单的系统而言这就是为自己找不自在  明明盖的是民房 硬要打摩天大楼的地基


。。

分享到:
评论
1 楼 zhumingpeng 2014-11-21  
你的Controller会被加载两次 你知道吗

相关推荐

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    Spring MVC利用依赖注入(DI)和面向切面编程(AOP)提供了强大的功能,如事务管理、数据验证等。 **Struts1与Struts2比较:** 1. **配置方式**:Struts1使用struts-config.xml,而Struts2使用struts.xml,后者更...

    Spring MVC总结.doc

    Spring MVC与Spring框架的其他组件如数据访问/事务管理、安全、缓存等无缝集成。这种集成使得开发者可以轻松地在整个应用中使用Spring的全套功能,而无需额外的配置或适配器。 5. **URL映射和调度** Spring MVC的...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    4. **Struts集成**:如果使用了spring-webmvc-struts.jar,需要了解如何在Struts和Spring之间进行交互,如使用Spring的Bean管理Struts的动作(Action)类。 5. **Web开发**:掌握如何创建RESTful API,处理HTTP请求...

    spring mvc 使用教程

    Spring MVC 提供了丰富的注解支持,如 `@Autowired` 自动注入服务,以及 `@Transactional` 事务管理,方便进行数据库的 CRUD 操作。 10. **循环遍历** 在视图层,我们可以使用 JSP 的 `c:forEach` 标签遍历集合...

    Spring MVC 开发一般步骤详述

    本篇文章将详细介绍Spring MVC的开发步骤,旨在帮助具备Java基础但不熟悉整合开发的开发者快速上手。 首先,我们需要创建一个新的Web项目。在项目中,我们需要修改`WEB-INF/web.xml`文件来配置Spring监听器和...

    spring.net mvc hibernamte整合实例

    Spring.NET MVC 和 Hibernate 是两个流行的开源框架,它们在 .NET 开发中被广泛用于构建企业级应用程序。Spring.NET 提供了依赖注入(DI)和面向切面编程(AOP)的功能,而 Hibernate 则是针对 .NET 的一个强大的...

    spring mvc

    - 更强的灵活性:Spring MVC支持多种视图技术,且与Spring其他模块集成紧密,如数据访问、事务管理等。 - 更少的配置:使用注解可以减少XML配置,提高开发效率。 在实际项目中,Spring MVC常常与Spring Boot结合...

    spring mvc 经典面试题

    通过本次的讲解,我们对Spring MVC的工作原理、使用Spring框架的原因、SSH整合以及Spring的事务管理有了更深入的了解。这些都是Java Web开发中非常重要的知识点,掌握这些知识对于一名合格的Java开发人员来说至关...

    ssh+spring mvc详细文档介绍

    SSH+Spring MVC是Java开发中常用的四大框架组合,它们分别是Struts2、Hibernate、Spring以及Spring MVC。这些框架协同工作,构建出高效、模块化的Web应用程序。以下是对这些框架的详细解析: **Struts2** 是一个...

    spring mvc+hibernate 简单 实例 代码,新手入门

    Spring MVC 和 Hibernate 是 Java Web 开发中的两个重要框架,它们分别负责控制器层和持久化层的任务,为开发者提供了高效、灵活的解决方案。本实例旨在帮助新手快速理解和掌握这两个框架的基本用法。 Spring MVC ...

    Spring in action 2nd

    ### Spring in Action 第二版 —— 详尽解析与学习指南 ...总之,《Spring in Action》第二版是一本不可或缺的学习资料,无论是对于Spring新手还是有经验的开发者来说,都能从中获得宝贵的指导和启发。

    spring mvc + hibernate4整合文档

    - **AOP(面向切面编程)**:Spring支持AOP,可以在不修改业务逻辑代码的情况下添加如事务管理、日志记录等横切关注点。 - **ORM(对象关系映射)**:Hibernate作为ORM框架,实现了Java对象与数据库表之间的映射,...

    spring in action的jar包

    确保这些jar包正确地添加到类路径中,是成功运行《Spring in Action》中示例的关键步骤。 在实际开发中,为了方便管理和更新,现在更常见的是使用Maven或Gradle这样的构建工具,它们可以自动下载并管理项目依赖,而...

    spring3 mvc 注解action dao service 实例教程

    ### Spring 3 MVC 注解Action DAO Service 实例教程 #### 一、Spring 3 MVC 注解概述 Spring框架自诞生以来一直致力于为复杂的软件工程问题提供简洁且非侵入式的解决方案。随着版本的演进,Spring 2.0 引入了定制...

    Spring in Action 中文版 pdf

    《Spring in Action》是Spring框架领域的一本经典著作,它以深入浅出的方式介绍了Spring框架的核心概念和技术。这本书的中文版对于中国的Java开发者来说是一份非常宝贵的资源,它帮助我们理解并掌握Spring框架,从而...

    Spring in action中文版(第4版)

    从内容中可以提炼出关于Spring框架的多个知识点,包括但不限于Spring的声明式事务管理、依赖注入、Spring MVC、Spring Boot等核心概念。 标题中的“Spring in action”指的是使用Spring进行开发的实践经验,而...

    struts2、 spring4、 spring mvc、 hibernate4、 mybatis的三大框架(三套)

    Struts2、Spring4、Spring MVC、Hibernate4和MyBatis是Java开发中非常重要的五个框架,它们分别在Web应用的各个层面提供了强大的支持。这三套框架组合在一起,可以构建出高效、灵活且可维护的Java Web应用程序。 1....

    Spring in Action 第四版英文原版+源码

    《Spring in Action》第四版是关于Spring框架的一本权威指南,由Manning出版社出版。这本书深入浅出地介绍了如何使用Spring框架构建强大的Java应用程序。英文原版提供了最原始的作者见解和技术细节,对于想要深入...

    spring-webmvc-struts.jar aspectjweaver.jar

    标题中的"spring-webmvc-struts.jar"和"aspectjweaver.jar"是两个重要的Java库文件,它们在Java Web开发中扮演着核心角色,特别是对于基于Spring框架的应用程序。现在让我们详细了解一下这两个库以及它们在实际开发...

Global site tag (gtag.js) - Google Analytics