Сценарий 1
В клиентском приложении (приложение не является веб-приложением, например может быть Swing-приложением)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Нет необходимости web.xml .ApplicationContext как контейнер для получения сервиса bean.Нет необходимости в контейнере веб-сервера.В test-client.xml может быть простой бин без удаленного взаимодействия, бин с удаленным взаимодействием.
Вывод : в сценарии 1 applicationContext и DispatcherServlet
не связаны.
Сценарий 2
В серверном приложении (приложение, развернутое на сервере, например Tomcat).Доступ к сервису через удаленное взаимодействие из клиентской программы (например, приложения Swing)
Определение прослушивателя в web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
При запуске сервера ContextLoaderListener
создает компоненты, определенные в applicationContext.xml .
Предполагается, что вы определили следующее в applicationContext.xml :
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Бины создаются из всех четырех файлов конфигурации test1.xml , test2.xml , test3.xml , test4.xml .
Заключение: в сценарии 2 applicationContext и DispatcherServlet
не связаны.
сценарий 3
В веб-приложении с пружиной MVC.
В web.xml define:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Когда запускается Tomcat, создаются бины, определенные в springweb-servlet.xml .DispatcherServlet
расширяется FrameworkServlet
.В FrameworkServlet
создается экземпляр боба для Springweb.В нашем случае springweb - это FrameworkServlet.
Вывод : в сценарии 3 applicationContext и DispatcherServlet
не связаны.
сценарий 4
В веб-приложении с пружиной MVC. springweb-servlet.xml для сервлета и applicationContext.xml для доступа к бизнес-службе в программе сервера или для доступа к службе БД в другой программе сервера.
In web.xml определены следующие параметры:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
При запуске сервера ContextLoaderListener
создает компоненты, определенные в applicationContext.xml ;при условии, что вы заявили здесь:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
Все бины создаются из всех четырех test1.xml , test2.xml , test3.xml , test4.xml .После завершения создания экземпляра bean-компонента, определенного в applicationContext.xml , создаются экземпляры bean-компонента, определенные в springweb-servlet.xml .
Таким образом, порядок создания экземпляров root является контекстом приложения,затем FrameworkServlet.
Теперь понятно, почему они важны для какого сценария.