spring 事务控制为什么不加在web controller 层
2017-06-15 00:00
357 查看
今天面试的时候, 一个面试官问我,,, 事务一般是加在 service 层的,为什么不加在 controller 层 ?
我 突然懵了,没听过 要加 web层的,而且觉得 这样加上去有用? 没有想过这样的问题:
而其实 事务是可以 加在 dao ,service , web层的。。。
参考地址: http://blog.csdn.net/mmm333zzz/article/details/45288061
参考地址: http://blog.csdn.net/tongyu75/article/details/53323892
我 突然懵了,没听过 要加 web层的,而且觉得 这样加上去有用? 没有想过这样的问题:
而其实 事务是可以 加在 dao ,service , web层的。。。
web层事务,这一般是针对那些安全性要求较高的系统来说的。例如电子商务网站。粒度小,一般系统用不着这么细。 service层事务,这是一常见的事务划分, 将事务设置在业务逻辑上,只要业务逻辑出错或异常就事务回滚。粒度较小,一般推荐这种方式。 数据持久层数据务,也就是常说的数据库事务。这种事务在安全性方面要求低。就是给一个简单的增删改之类的操作增加事务操作。粒度大
参考地址: http://blog.csdn.net/mmm333zzz/article/details/45288061
一般而言,事务都是加在Service层的,但是爱钻牛角尖的我时常想:事务加在Controller层可不可以。我一直试图证明事务不止可以加在Service层,还可以加在Controller层,但是没有找到有力的论据来支持我这个想法,搞得我一度认为事务只能加在Service层,直到我读过spring官方文档并实践之后,我知道我的想法是对的。 在spring-framework-reference.pdf文档中有这样一段话: <tx:annotation-driven/> only looks for @Transactional on beans in the same application context it is defined in. This means that, if you put <tx:annotation-driven/> in a WebApplicationContext for a DispatcherServlet, it only checks for @Transactional beans in your controllers, and not your services. 这句话的意思是,<tx:annoation-driven/>只会查找和它在相同的应用上下文件中定义的bean上面的@Transactional注解,如果你把它放在Dispatcher的应用上下文中,它只检查控制器上的@Transactional注解,而不是你services上的@Transactional注解。 于是,我将事务配置定义在Spring MVC的应用上下文(*-servlet.xml)中,将@Transactional注解打在Controller上,终于事务起作用了。 综上,在Spring MVC中,事务不仅可以加在Service层,同样也可以加在Controller层(虽然不推荐这么做,但至少满足了我的好奇心,(*^__^*) 嘻嘻……)。 注意: Controller层只支持 @Transactional 注解式事务!
参考地址: http://blog.csdn.net/tongyu75/article/details/53323892
相关文章推荐
- 使用SpringMVC+mybatis+事务控制+JSON 配置最简单WEB
- 初探hibernate和spring集成得事务控制原理,欢迎交流。
- 为什么说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架?
- spring 的事务控制 (spring + Ibatis)
- 请问为什么用spring事务管理?
- Spring事务托管配置及session控制
- hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
- Spring源码解析(一) Spring事务控制之Hibernate
- spring 的aop控制事务
- Spring_事务控制
- 在Spring中使用JTA事务管理【两个数据库实现事务控制】
- 为什么用 CXF 和 Spring 创建 Web 服务?
- spring 2.5整合jdbc进行数据库操作和XML事务控制
- spring 2.5整合jdbc进行数据库操作和注解事务控制
- 利用spring提供的MockHttpServletRequest,直接测试项目的控制层controller
- 为什么要使用Spring Web Flow?
- 详解Spring Web MVC中的Controller(下)
- Spring 事务控制的几个文章
- spring多线程事务控制
- Spring中的事务控制学习中