zoukankan      html  css  js  c++  java
  • spring mvc 给action添加事务不成功的原因

    spring springMVC ation事务管理
    自己单独做了个小网站 但是发现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了

    Xml代码  收藏代码
    <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(vopoo)和jsp页面。写一个小功能 7、8个类就写出来了。 开发者说我就是想接点私活儿,和PHP,ASP抢抢饭碗,但我又是Java程序员。最好的结果是大项目能做好,小项目能做快。所以“激进型”方案就出现了-----没有接口、没有Service层、还可以没有众多的O(vopoo)。那没有Service层事务控制在哪一层?只好上升的Action层。

    本文不想说这是不是正确的思想,我想说的是Spring不会限制你这样做。
  • 相关阅读:
    php-浅谈php底层机制
    Apache-三种工作模式(prefork/ worker/Event)
    java入门了解01
    webserivce通过httppost方式调用
    sqlserver 打开 database diagrams 报错:error code 0x54b
    redhat7,redhat6 替换yum
    虚拟机网络配置的一点总结
    搭建sqlserver AlwaysOn
    NSSM-将服务变为window service
    JavaMelody-监控jvm性能
  • 原文地址:https://www.cnblogs.com/iamconan/p/7383459.html
Copyright © 2011-2022 走看看