Освоение встроенных областей видимости Spring: полное руководство от понимания к практике
Как широко используемая среда Java, Spring предоставляет мощные функции и богатые компоненты для наших проектов. В этом сообщении блога мы рассмотрим встроенные области видимости Spring и способы их гибкого использования в реальной разработке. Давайте начнем!
Оглавление
Введение
В Spring Framework область — это то, как компоненты существуют и управляются в контейнере Spring. В Spring есть несколько встроенных областей видимости, и в реальном процессе разработки нам нужно выбирать подходящие области видимости для различных сценариев приложений.
Встроенные прицелы Spring
Область действия синглтона
Синглтон — это область действия Spring по умолчанию. В этой области контейнер Spring гарантирует, что в каждом контейнере будет только один экземпляр. Это очень эффективно и подходит для сценария использования компонентов в большинстве случаев.
В конфигурации XML используйте singleton
области видимости:
<bean id="exampleBean" class="com.example.ExampleBean" scope="singleton" />
С помощью аннотаций Java можно добавить их в класс @Scope("singleton")
, либо не указывать область видимости (по умолчанию — singleton):
@Component
@Scope("singleton")
public class ExampleBean {
}
Объем прототипа
В отличие от области Singleton, область Prototype позволяет контейнеру Spring создавать новый экземпляр компонента для каждого запроса, гарантируя, что разные пользователи используют разные экземпляры компонента.
В файле конфигурации XML этого можно добиться, установив scope
для свойства значение prototype
:
<bean id="exampleBean" class="com.example.ExampleBean" scope="prototype" />
Чтобы использовать аннотации Java, вам нужно добавить в класс @Scope("prototype")
:
@Component
@Scope("prototype")
public class ExampleBean {
}
Объем запроса
Область запроса ограничивает создание экземпляров компонентов и жизненный цикл HTTP-запросов. Каждый новый запрос создает новый экземпляр компонента, который уничтожается после завершения запроса.
Настройте область запроса в файле XML:
<bean id="exampleBean" class="com.example.ExampleBean" scope="request" />
@Scope("request")
Используя аннотации Java, добавьте и в класс @RequestScope
:
@Component
@Scope("request")
public class ExampleBean {
}
// 或
@Component
@RequestScope
public class ExampleBean {
}
Область сеанса
Область сеанса связывает жизненный цикл компонента с сеансом HTTP. Для каждого сеанса контейнер создает новый экземпляр компонента.
Настройте область сеанса в XML:
<bean id="exampleBean" class="com.example.ExampleBean" scope="session" />
@Scope("session")
Используя аннотации Java, добавьте и в класс @SessionScope
:
@Component
@Scope("session")
public class ExampleBean {
}
// 或
@Component
@SessionScope
public class ExampleBean {
}
Область применения
Связанная с ServletContext область приложения позволяет существовать только одному экземпляру компонента на протяжении всего жизненного цикла записи веб-приложения.
Область применения используется в конфигурации XML:
<bean id="exampleBean" class="com.example.ExampleBean" scope="application" />
Используя аннотации Java, добавьте в класс @Scope("application")
:
@Component
@Scope("application")
public class ExampleBean {
}
практическое применение
Пример 1. Аутентификация пользователя — использование области сеанса
Когда мы создаем веб-приложение, которому необходимо аутентифицировать пользователя, мы можем привязать данные для входа пользователя к сеансу HTTP. В этом случае компонент проверки подлинности пользователя может быть установлен на область сеанса.
Пример 2. Корзина — использование области запроса
На веб-сайте электронной коммерции, который позволяет пользователям делать покупки, компонент корзины покупок должен следовать жизненному циклу HTTP-запросов, чтобы гарантировать, что каждый запрос создает новый экземпляр корзины покупок. Таким образом, область запроса может быть использована.
Подведем итог
В этой статье мы подробно разобрались с пятью встроенными типами областей действия в Spring и проанализировали, как выбрать подходящую область действия в соответствии со сценой в реальной разработке. Мы всесторонне обсудили четыре встроенных области действия Spring: синглтон, прототип, запрос и сеанс, а также рассмотрели, как их применять в практических сценариях.
Сначала мы подробно рассмотрели каждую область:
- Singleton: область действия по умолчанию, в контейнере существует только один экземпляр, подходящий для всех сценариев с одним и тем же состоянием.
- Прототип: контейнер будет создавать новый экземпляр для каждого требования внедрения, подходящего для сценариев без общего состояния.
- Запрос: область ограничена одним HTTP-запросом.
- Сеанс: область ограничена сеансом пользователя, что подходит для приложений, отслеживающих статус пользователя и конкретную информацию о пользователе.
Далее мы продемонстрировали, как применять эти встроенные области видимости к нашему коду. Мы определяем области действия для различных bean-компонентов с помощью @Scope
аннотаций и объявления атрибутов в файлах конфигурации XML .scope
В этой статье также обсуждаются некоторые ограничения и соображения, касающиеся областей. Например, рассмотрите проблемы синхронизации в определенной области при выполнении обратных вызовов жизненного цикла. Кроме того, мы обсудили использование шаблона прокси для ленивой реализации областей запроса и сеанса.
Таким образом, понимание встроенных областей действия Spring и того, как выбрать подходящую область действия на основе реальных потребностей, имеет решающее значение для написания поддерживаемого и расширяемого кода. В этой статье мы надеемся предоставить читателям практическое и исчерпывающее руководство, которое поможет вам лучше использовать области видимости в Spring Framework.