`
uule
  • 浏览: 6323876 次
  • 性别: 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.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.net mvc hibernamte整合实例

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

    spring mvc

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

    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的jar包

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

    Spring In Action中文版+英文版+文中源码

    《Spring In Action》是一本深度剖析Spring框架的权威著作,无论是中文版还是英文版,都是IT开发者们深入理解和掌握Spring框架的重要参考资料。该书详细介绍了Spring框架的各种功能和使用技巧,帮助开发者提升在实际...

    Spring in Action 中文版 pdf

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

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

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

    spring-webmvc-struts.jar aspectjweaver.jar

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

    Struts和Spring两种MVC框架究竟有什么不同呢?

    Struts和Spring是Java Web开发中两种非常流行的MVC(Model-View-Controller)框架,它们都致力于解耦应用程序的业务逻辑和展示层,但各自有着不同的设计哲学和功能特性。 Struts是Apache软件基金会的一个开源项目,...

    spring实例(经典推荐)SpringMVCDemo.rar

    Spring还支持事务管理,确保了数据的一致性和完整性。 在项目结构上,SpringMVCDemo通常包括以下几个关键部分: 1. `src/main/java`:包含所有的Java源代码,包括Service、DAO、Model、Controller等类。 2. `src/...

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

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

    spring in action 第二版中文版

    《Spring in Action》第二版中文版是一本深受开发者欢迎的Spring框架入门与进阶书籍,旨在帮助读者深入理解和掌握Spring框架的核心概念和技术。这本书详细介绍了如何利用Spring进行企业级Java应用开发,包括依赖注入...

    Spring in action第二版

    虽然《Spring in Action》第二版不包含这部分内容,但了解Spring Cloud对于现代Java开发是必要的。 通过阅读《Spring in Action》第二版,读者不仅可以掌握Spring框架的基础,还能了解到在实际项目中如何有效地运用...

    struts和spring的MVC模式的比较

    Struts框架的核心是Controller部分,即ActionServlet,它负责接收用户请求并转发给相应的Action,Action再执行业务逻辑。ActionForm Bean用于在Controller和View之间传递数据,实现了Model部分。Struts的View主要...

    毕设 外文文献翻译-Spring的web MVC构架模式.docx

    - **与WebWork**:Spring MVC将控制器、命令对象和模型角色分开,而WebWork将它们合并到Action对象中。Spring MVC支持更细粒度的职责分配,提供了更好的模块化。 4. **事务管理**:Spring MVC支持声明式事务管理,...

Global site tag (gtag.js) - Google Analytics