Ответ 1
Корневой контекст
Корневым контекстом в приложении Spring является ApplicationContext
, который загружается ContextLoaderListener
. Этот контекст должен иметь глобально доступные ресурсы, такие как службы, репозитории, инфраструктура beans (DataSource
, EntityManagerFactory
и т.д.) И т.д.
ContextLoaderListener
регистрирует этот контекст в ServletContext
под именем org.springframework.web.context.WebApplicationContext.ROOT
.
Если вы загрузите ApplicationContext
самостоятельно и зарегистрируйте его с именем, указанным выше в ServletContext
, которое затем будет квалифицироваться как корневой контекст.
Контекст для детей
Детский контекст в приложении Spring - это ApplicationContext
, который загружается DispatcherServlet
(или, например, a MessageDispatcherServlet
в приложение Spring -WS). Этот контекст должен содержать только beans, относящийся к этому контексту, для Spring MVC, который будет ViewResolver
s, HandlerMapping
и т.д.
Сервлет регистрирует этот контекст в ServletContext
под именем org.springframework.web.servlet.FrameworkServlet.CONTEXT.<servlet-name>
.
Отношение корня < -Child
Только дочерние контексты имеют доступ к родительскому контексту, потому что у вас может быть несколько дочерних контекстов. Например, в Spring MVC в сочетании с приложением Spring WS. Родительский контекст обнаруживает дочерние элементы, находя его в ServletContext
с известным именем.
Если корневой контекст будет иметь доступ к ребенку, который он использовал бы для проводки beans? Рядом с этим, если это будет так, вы также получите неожиданные результаты при участии АОП. AOP, определенный в дочернем контексте, внезапно повлияет на beans, настроенный в корневом контексте.