spring的核心就是容器,何為容器玩般,簡單的說就是管理Java對象的一個大罐子银觅,任何java對象都可以讓spring去管理,省的我們操心坏为,我們在用的時候只需要從spring容器中取出來即可究驴,很方便,這也是為什么spring可以成為web開發(fā)的主流框架匀伏。下面我談?wù)剆pring的父子容器
?什么叫父子容器洒忧?簡單點說spring的父子容器有點類似于java的繼承,spring的規(guī)則是 子容器的bean可以訪問到父容器的bean但是父容器的bean是沒有權(quán)限訪問子容器的bean 這是spring不成文的規(guī)定下面我以web開發(fā)為例講解上下文:
父上下文:
使用listener監(jiān)聽器來加載配置文件帘撰,如下:
Spring 會創(chuàng)建一個WebApplicationContext上下文跑慕,稱為父上下文(父容器),保存在 ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值核行。
可以使用Spring提供的工具類取出上下文對象:WebApplicationContextUtils.getWebApplicationContext(ServletContext);
子上下文:
使用Spring MVC 來處理攔截相關(guān)的請求時牢硅,會配置DispatchServlet
每個DispatchServlet會有一個自己的上下文,稱為子上下文芝雪,它也保存在 ServletContext中减余,key 是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名稱。當(dāng)一 個Request對象產(chǎn)生時惩系,會把這個子上下文對象(WebApplicationContext)保存在Request對象中位岔,key是 DispatcherServlet.class.getName() + ".CONTEXT"。
可以使用工具類取出上下文對象:RequestContextUtils.getWebApplicationContext(request);
父上下文(父容器)和子上下文(子容器)的訪問權(quán)限:
子上下文可以訪問父上下文中的bean堡牡,但是父上下文不可以訪問子上下文中的bean