码迷,mamicode.com
首页 > 编程语言 > 详细

Spring和SpringMVC父子容器问题

时间:2020-10-20 16:18:29      阅读:25      评论:0      收藏:0      [点我收藏+]

标签:ring   容器   可见   获取   文件   声明式   dispatch   contex   ast   

在 Spring 与 Springmvc 同时使用时,Spring 的 ContextLoaderListener 会创建的 SpringIOC 容器,SpringMVC 的 DispatcherServlet 会创建 SpringMVC 的 IOC 容器。SpringMVC会将 SpringIOC 容器设置为父容器。
技术图片
父容器对子容器是可见的,所以在子容器中可以访问父容器的 Bean 对象,而子容器对 父容器不可见的,所以在父容器中无法获取子容器的 Bean 对象。

注解扫描时需要注意:

如果在 SpringMVC 的配置文件中扫描所有注解,会出现声明式事务失效。因为 Spring 声明式事务管理的切面位于 Spring 的 IOC 容器,而子容器对父容器不可见,所以事务管理器 的切面无法对 SpringIOC 容器中的 Bean 对象实现事务控制。
如果在 Spring 的配置文件中扫描所有注解,会出现无法找到控制器而报 404 的异常。 因为 HandleMapping 在根据 URI 查找控制器时,只会去 SpringMVC 的 IOC 容器中查找控制器, 而在 SpringMVC 的 IOC 容器并没有控制器对象,所以会出现 404 的异常。

正确使用方式:

在 SpringMVC 的配置文件中扫描@Controller 注解,在 Spring 的配置文件中扫描除了 @Controller 以外的其他注解。在 SpringMVC 的控制器可以注入 SpringIOC 容器中的 Bean 对 象,因为父容器对子容器是可见的。

Spring和SpringMVC父子容器问题

标签:ring   容器   可见   获取   文件   声明式   dispatch   contex   ast   

原文地址:https://www.cnblogs.com/freefantasy/p/13844063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!