`
120183228
  • 浏览: 16328 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

自己单独做了个小网站 但是发现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上下文中配置  不累吗?  对于一个简单的系统而言这就是为自己找不自在  明明盖的是民房 硬要打摩天大楼的地基 

 

另有一篇博客也是这样说的

 

 http://elf8848.iteye.com/blog/875830

 

 五、父子上下文(WebApplicationContext) 方法二激进型

 

方案二,激进型:

 

Java世界的“面向接口编程”的思想是正确的,但在增删改查为主业务的系统里,Dao层接口,Dao层实现类,Service层接口,Service层实现类,Action父类,Action。再加上众多的O(vo\po\bo)和jsp页面。写一个小功能 7、8个类就写出来了。 开发者说我就是想接点私活儿,和PHP,ASP抢抢饭碗,但我又是Java程序员。最好的结果是大项目能做好,小项目能做快。所以“激进型”方案就出现了-----没有接口、没有Service层、还可以没有众多的O(vo\po\bo)。那没有Service层事务控制在哪一层?只好上升的Action层。

 

本文不想说这是不是正确的思想,我想说的是Spring不会限制你这样做。

 

 

 

 

 

 

Java--大项目能做好--按传统方式做,规规矩矩的做,好扩展,好维护。

Java--小项目能做快--按激进方式做,一周时间就可以出一个版本,先上线接受市场(用户)的反馈,再改进,再反馈,时间就是生命(成本)。

3
3
分享到:
评论
6 楼 120183228 2013-04-10  
jinnianshilongnian 写道
120183228 写道
jinnianshilongnian 写道
<aop:config>   
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/>  

估计你使用的是struts2  此时代理了接口(Action) 所以你自己写的方法无事务  代理类即可



我都说了是Spring mvc了 还使用struts2???  这么奇葩的组合没见过 也没用过

没看仔细 我的罪过。可能的问题:
1、spring mvc加载的配置文件有没有把parent的覆盖点
http://jinnianshilongnian.iteye.com/blog/1762632
2、你的控制器是否实现如接口之类的,是否代理的是类



你的和我的不一样  你可能都是用DispatcherServlet加载上下文的
而我的只能是通过ContextLoaderListener加载
因为我自定义了了一个DelegatingFilterProxy
而这个Filter里面我又用到了持久层接口
所以我只能用ContextLoaderListener加载
不然启动的时候web容器就会报错 找不到这个Filter

如果使用DispatcherServlet加载就不会出现我的这个问题 
5 楼 jinnianshilongnian 2013-04-09  
120183228 写道
jinnianshilongnian 写道
<aop:config>   
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/>  

估计你使用的是struts2  此时代理了接口(Action) 所以你自己写的方法无事务  代理类即可



我都说了是Spring mvc了 还使用struts2???  这么奇葩的组合没见过 也没用过

没看仔细 我的罪过。可能的问题:
1、spring mvc加载的配置文件有没有把parent的覆盖点
http://jinnianshilongnian.iteye.com/blog/1762632
2、你的控制器是否实现如接口之类的,是否代理的是类
4 楼 120183228 2013-04-08  
Saro 写道
如果是一个简单的增删改查系统的话,写一个代码生成器是最好的选择。

增删改查也有需求  不是每个都是save 也不是每个都是find  也有一些判断和条件
前台页面生成器还行后台服务器用代码生成器?  除非生成个数据字典  生成其他的代码就是脑子秀逗了
3 楼 120183228 2013-04-08  
jinnianshilongnian 写道
<aop:config>   
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/>  

估计你使用的是struts2  此时代理了接口(Action) 所以你自己写的方法无事务  代理类即可



我都说了是Spring mvc了 还使用struts2???  这么奇葩的组合没见过 也没用过
2 楼 Saro 2013-04-08  
如果是一个简单的增删改查系统的话,写一个代码生成器是最好的选择。
1 楼 jinnianshilongnian 2013-04-08  
<aop:config>   
        <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/>  

估计你使用的是struts2  此时代理了接口(Action) 所以你自己写的方法无事务  代理类即可

相关推荐

    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