Java面试题

题目

spring mvc 中父子容器了解吗?讲一讲父子容器。

答案

在 spring mvc 中,我们在配置文件里面会配置 DispatcherServletContextLoaderListener 两者在项目启动的时候都会遍历项目中的所有的类,将 bean 维护到 spring 容器中去。其中 ContextLoaderListener 监听到是 spring 框架本身的 bean 上下文,DispatcherServlet 监听的是 springMvc上下文。

spring 框架本身的上下文就是将那些加了 @Service 等一系列的 bean 放在spring 容器中,而那些加了 @Controller 的那些 bean 是放在 springmvc 容器中。

spring容器是父容器,spring mvc 容器是子容器。子容器可以访问父容器里面的资源,而父容器看不到子容器里面的资源。

在spring mvc 配置扫描包的时候,只会配置扫描 controller 下面的包,如果配置错误,将所有的类都加载进去,这样子容器里面就会包含所有的 bean,在使用到相关的 bean 时候,不会去父容器中获取,但是这里面的 service 是没有事务等功能的(没有 Spring 框架的配置),只是普通的 bean,因此使用起来会有不可预知的问题。