spring mvc 中父子容器了解吗?讲一讲父子容器。
在 spring mvc 中,我们在配置文件里面会配置 DispatcherServlet
和 ContextLoaderListener
两者在项目启动的时候都会遍历项目中的所有的类,将 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,因此使用起来会有不可预知的问题。