ПРЕДПОСЫЛКИАссоциация между: SpringIocContainer | ApplicationContext | WebApplicationContext
После чтения из 123456 Ссылки я пришел к следующему conclusion-
Как Spring MVC разработан более standered servlets
и облегчают такую же функциональность servlet context
и application context
.в весной есть два типа контекста ApplicationContext
и WebApplicationContext
-
ApplicationContext
Инициализация: ContextLoaderListener
, для одного приложения. WebApplicationContext
Загружено пользователем DispatcherServlet
.
Мы можем понять, как это выше ApplicationContext
распространяется на WebApplicationContext
так, что когда-либо материал, связанный с ApplicationContext
в конце концов, это часть WebApplicationContext
.
Сомнения
ApplicationContextAware
предложения, которыеcontext
объект.public class SomeThing implements ApplicationContextAware{ @Override public void setApplicationContext(ApplicationContext ctx) throws BeanException{ //this context object is `ApplicationContext` or `WebApplicationContext`? } }
context
иcontainer
кажется синонимы к большинству из нас, я хочу дать example.Let сказать, что мы имеем два диспетчера сервлета один дляrest
и другой дляmvc
.Первый грузоотправитель -
public class RestInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/rest/*" }; } }
Второй грузоотправитель -
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/mvc/*" }; } }
чем здесь есть два экземпляра
WebApplicationContext
, те общая часть загружаетсяContextLoaderListner
, как определить вrootContext
,Я не уверен, но не должно быть 2 IocContainer в единственном SpringApplication.
BeanFactory т.е. SpringIocContainer есть, где вся объектный боб жизни, что когда-либо объектов, которые мы ассоциаты с
WebApplicationContext
является части Spring контейнера, как это контейнер инициализируетсяWebApplicationContext
? Я хочу хочу знать, как делает они оба связаны друг с другом?И всякий раз, когда мы делали
ctx.getBean()
- это возвращает объект с весны контейнер, как это происходит между контекстом и контейнером ?
Существует аналогичный answer что отрицает оба же, он говорит
Spring поставляется с несколькими реализациями контейнеров, оба определения нагрузки фасоли, проволочная фасоль вместе, и отказаться от бобов по запросу, но ApplicationContext предлагает гораздо больше.
Итак, моя точка в том, почему оба определения боковых бобов, проводные бобы вместе, это своего рода переделка?
Еще одна вещь, даже если веб-приложение весной приводом или нет, должен быть контекст, который standard servlet
обеспечивает и использовать в НТТР ......
весна следует за этим или весной обрабатывает это в некоторые другие manner.And весной context
означает только IOC container
, из которых некоторая часть загружается DispacherServlet
и часть загружается ContextLoaderListner
и может облегчить гораздо больше таких, как I18N
, access to static resource
и т.д ..
«WebApplicationContext» - это «ApplicationContext». И 'ContextLoaderLIstener', и' DispatcherServlet' загружают экземпляр 'WebApplicationContext' (который фактически является интерфейсом). Существует только «ApplicationContext», независимо от того, связан ли он с веб-сайтом или не веб-сайтом. «ApplicationContext» - это контейнер. –
@ M.Deinum Как вы указали, существует один «контекст» для каждого приложения, есть много писем, которые объясняют существование обоих, некоторые из них упоминаются в самом вопросе. Более того, если вы инициализируете свой контекст «DispatcherServlet», то есть нет 'ContextLoaderListner' ans call spring security' 'this будет вызывать' IllegalStateException: No ApplicationContext found: ' –
Нет, я нигде не указал на то, что существует один контекст ... Но только весна имеет понятие «ApplicationContext» .. Который может быть типа 'WebApplicationContext'. Может быть 1 или 100. То, что я намекнул на то, что «ContextLoaderListener» и «DispatcherServlet» загружают «WebApplicationContext». «ContextLoaderLIstener» загружает контекст, обычно называемый корневым контекстом, который также предоставляет доступ к фильтрам. Вы также можете это сделать (если у вас есть один 'DispatcherServlet', чтобы разоблачить его как корневой контекст (и это, как правило, то, что люди забывают, приводя к проблеме, на которую вы указываете)). –