Освоение встроенных областей видимости Spring: полное руководство от понимания к практике

Освоение встроенных областей видимости Spring: полное руководство от понимания к практике

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

Оглавление

  1. Введение
  2. Встроенные прицелы Spring
    1. Область действия синглтона
    2. Объем прототипа
    3. Объем запроса
    4. Область сеанса
    5. Область применения
  3. практическое применение
  4. Подведем итог

Введение

В 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: синглтон, прототип, запрос и сеанс, а также рассмотрели, как их применять в практических сценариях.

Сначала мы подробно рассмотрели каждую область:

  1. Singleton: область действия по умолчанию, в контейнере существует только один экземпляр, подходящий для всех сценариев с одним и тем же состоянием.
  2. Прототип: контейнер будет создавать новый экземпляр для каждого требования внедрения, подходящего для сценариев без общего состояния.
  3. Запрос: область ограничена одним HTTP-запросом.
  4. Сеанс: область ограничена сеансом пользователя, что подходит для приложений, отслеживающих статус пользователя и конкретную информацию о пользователе.

Далее мы продемонстрировали, как применять эти встроенные области видимости к нашему коду. Мы определяем области действия для различных bean-компонентов с помощью @Scopeаннотаций и объявления атрибутов в файлах конфигурации XML .scope

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

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

おすすめ

転載: blog.csdn.net/weixin_45766780/article/details/131154816