Сценарий 1
В клиентском приложении (приложение не является веб-приложением, например может быть приложением Swing)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
Нет необходимости в web.xml . ApplicationContext как контейнер для получения сервиса bean. Нет необходимости в контейнере веб-сервера. В test-client.xml может быть Simple bean без удаленного взаимодействия, bean с удаленным взаимодействием.
Вывод : в сценарии 1 applicationContext и DispatcherServlet
не связаны между собой.
Сценарий 2
В серверном приложении (приложение, развернутое на сервере, например, Tomcat). Доступ к услуге через удаленное взаимодействие из клиентской программы (например, приложение Swing)
Определить слушателя в web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
При запуске сервера ContextLoaderListener
создает экземпляры bean-компонентов, определенных в 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 определите:
<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 для доступа к бизнес-службе в программе сервера или для доступа к службе БД в другой программе сервера.
В 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
создает экземпляры bean-компонентов, определенных в 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 .
Итак, порядок создания экземпляров: корень (контекст приложения), затем FrameworkServlet.
Теперь должно быть понятно, почему они важны в каком сценарии.