Перейти к основному содержимому

Различия между applicationContext.xml и spring-servlet.xml в Spring

· 4 мин. чтения

1. Введение

При разработке приложения Spring необходимо указать фреймворку, где искать bean-компоненты. Когда приложение запускается, платформа находит и регистрирует их все для дальнейшего выполнения. Точно так же нам нужно определить отображение, где будут обрабатываться все входящие запросы к веб-приложению.

Все веб-фреймворки Java построены на основе API сервлетов . В веб-приложении жизненно важную роль играют три файла. Обычно мы связываем их по порядку: web.xml -> applicationContext.xml -> spring-servlet.xml

В этой статье мы рассмотрим различия между applicationContext и spring-servlet .

2. applicationContext.xml

Инверсия управления (IoC) является ядром фреймворка Spring. В среде с поддержкой IoC обычно контейнер отвечает за создание, создание и удаление объектов. В Spring applicationContext играет роль контейнера IoC.

При разработке стандартного J2EE-приложения мы объявляем ContextLoaderListener в файле web.xml . Кроме того, contextConfigLocation также определен для указания файла конфигурации XML.

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

Когда приложение запускается, Spring загружает этот файл конфигурации и использует его для создания объекта WebApplicationContext . При отсутствии contextConfigLocation по умолчанию система будет искать файл /WEB-INF/applicationContext.xml для загрузки .

Короче говоря, applicationContext — это центральный интерфейс в Spring. Он предоставляет информацию о конфигурации для приложения.

В этом файле мы предоставляем конфигурации, связанные с приложением. Обычно это основной источник данных, файл-заполнитель свойств и источник сообщений для локализации проекта, а также другие улучшения.

Давайте посмотрим на пример файла:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">

<context:property-placeholder location="classpath:/database.properties" />

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
</bean>

<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
</beans>

ApplicationContext является полным надмножеством интерфейса BeanFactory и, следовательно, предоставляет все функциональные возможности BeanFactory . Он также обеспечивает интегрированное управление жизненным циклом, автоматическую регистрацию BeanPostProcessor и BeanFactoryPostProcessor , удобный доступ к MessageSource и публикацию ApplicationEvent.

3. spring-servlet.xml

В Spring один фронтальный сервлет принимает входящие запросы и делегирует их соответствующим методам контроллера. Фронтальный сервлет, основанный на шаблоне проектирования Фронт-контроллера , обрабатывает все HTTP-запросы определенного веб-приложения. Этот передний сервлет имеет все элементы управления входящими запросами.

Точно так же spring-servlet действует как сервлет фронт-контроллера и предоставляет единую точку входа. Он принимает входящий URI. За кулисами он использует реализацию HandlerMapping для определения сопоставления между запросами и объектами обработчика.

Давайте посмотрим на пример кода:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<mvc:annotation-driven />
<context:component-scan base-package="com.foreach.controller" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

</beans>

4. applicationContext.xml и spring- servlet.xml ``

Давайте посмотрим на итоговое представление:

   | **Особенность**    | `applicationContext.xml`    | `весна-servlet.xml`   | 
| **Рамки** | Это часть фреймворка Spring. | Это часть фреймворка Spring MVC. |
| **Цель** | Контейнер, определяющий бины Spring. | Фронт-контроллер, обрабатывающий входящие запросы. |
| **Сфера** | Он определяет bean-компоненты, которые являются общими для всех сервлетов. | Он определяет только bean-компоненты, специфичные для сервлета. |
| **Управляет** | Он управляет глобальными вещами, такими как `источник данных,` и в нем определены фабрики соединений. | И наоборот, в нем будут определены только веб-вещи, такие как контроллеры и `viewresolver .` |
| **использованная литература** | Он не может получить доступ к компонентам `spring-servlet` . | Он может получить доступ к bean-компонентам, определенным в `applicationContext` . |
| **Обмен** | Сюда будут помещены свойства, общие для всего приложения. | Здесь будут находиться свойства, относящиеся только к одному сервлету. |
| **Сканирование** | Мы определяем фильтры для включения/исключения пакетов. | Мы объявляем сканирование компонентов для контроллеров. |
| **Вхождение** | Обычно в приложении определяют несколько файлов контекста. | Точно так же мы можем определить несколько файлов в веб-приложении. |
| **Загрузка** | Файл applicationContext.xml загружается `ContextLoaderListener` . | Файл spring-servlet.xml загружается `DispatcherServlet` . |
| **Необходимый** | По желанию | Обязательный |

5. Вывод

В этом руководстве мы узнали о файлах applicationContext и spring-servlet . Затем мы обсудили их роль и обязанности в приложении Spring. В конце мы рассмотрели различия между ними.