spring的核心就是容器,何为容器,简单的说就是管理Java对象的一个大罐子,任何java对象都可以让spring去管理,省的我们操心,我们在用的时候只需要从spring容器中取出来即可,很方便,这也是为什么spring可以成为web开发的主流框架。下面我谈谈spring的父子容器
什么叫父子容器?简单点说spring的父子容器有点类似于java的继承,spring的规则是 子容器的bean可以访问到父容器的bean但是父容器的bean是没有权限访问子容器的bean 这是spring不成文的规定下面我以web开发为例讲解上下文:
父上下文:
使用listener监听器来加载配置文件,如下:
Spring 会创建一个WebApplicationContext上下文,称为父上下文(父容器),保存在 ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。
可以使用Spring提供的工具类取出上下文对象:WebApplicationContextUtils.getWebApplicationContext(ServletContext);
子上下文:
使用Spring MVC 来处理拦截相关的请求时,会配置DispatchServlet
每个DispatchServlet会有一个自己的上下文,称为子上下文,它也保存在 ServletContext中,key 是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。当一 个Request对象产生时,会把这个子上下文对象(WebApplicationContext)保存在Request对象中,key是 DispatcherServlet.class.getName() + ".CONTEXT"。
可以使用工具类取出上下文对象:RequestContextUtils.getWebApplicationContext(request);
父上下文(父容器)和子上下文(子容器)的访问权限:
子上下文可以访问父上下文中的bean,但是父上下文不可以访问子上下文中的bean
网友评论