Учебники

Весна — Объем бобов

При определении <bean> у вас есть возможность объявить область действия для этого bean. Например, чтобы заставить Spring создавать новый экземпляр компонента каждый раз, когда он необходим, вы должны объявить атрибут области действия компонента как прототип . Точно так же, если вы хотите, чтобы Spring возвращал один и тот же экземпляр компонента каждый раз, когда он необходим, вы должны объявить атрибут области действия компонента как одноэлементный .

Spring Framework поддерживает следующие пять областей, три из которых доступны только при использовании веб-приложения ApplicationContext.

Sr.No. Область применения и описание
1

одиночка

Это ограничивает определение компонента одним экземпляром для каждого контейнера IoC Spring (по умолчанию).

2

прототип

Это ограничивает определение единственного бина любым количеством экземпляров объекта.

3

запрос

Это ограничивает определение bean-компонента до HTTP-запроса. Действителен только в контексте веб-приложения Spring ApplicationContext.

4

сессия

Это ограничивает определение компонента для сеанса HTTP. Действителен только в контексте веб-приложения Spring ApplicationContext.

5

глобальный сеанс

Это определяет определение bean-компонента для глобального сеанса HTTP. Действителен только в контексте веб-приложения Spring ApplicationContext.

одиночка

Это ограничивает определение компонента одним экземпляром для каждого контейнера IoC Spring (по умолчанию).

прототип

Это ограничивает определение единственного бина любым количеством экземпляров объекта.

запрос

Это ограничивает определение bean-компонента до HTTP-запроса. Действителен только в контексте веб-приложения Spring ApplicationContext.

сессия

глобальный сеанс

Это определяет определение bean-компонента для глобального сеанса HTTP. Действителен только в контексте веб-приложения Spring ApplicationContext.

В этой главе мы обсудим первые две области, а остальные три — при обсуждении веб-приложения Spring ApplicationContext с поддержкой веб-интерфейса.

Одиночная сфера

Если для области задано одноэлементное значение, контейнер Spring IoC создает ровно один экземпляр объекта, определенный этим определением компонента. Этот единственный экземпляр хранится в кэше таких одноэлементных компонентов, и все последующие запросы и ссылки для этого именованного компонента возвращают кешированный объект.

Область по умолчанию всегда одноэлементная. Однако, когда вам нужен один и только один экземпляр компонента, вы можете установить для свойства scope значение singleton в файле конфигурации компонента, как показано в следующем фрагменте кода:

<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
   <!-- collaborators and configuration for this bean go here -->
</bean>

пример

Давайте создадим рабочую среду Eclipse и предпримем следующие шаги для создания приложения Spring:

меры Описание
1 Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте.
2 Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» .
3 Создайте классы Java HelloWorld и MainApp в пакете com.tutorialspoint .
4 Создайте файл конфигурации Beans Beans.xml в папке src .
5 Последний шаг — создать содержимое всех файлов Java и файла конфигурации Bean и запустить приложение, как описано ниже.

Вот содержимое файла HelloWorld.java

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

Ниже приводится содержание файла MainApp.java

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");

      objA.setMessage("I'm object A");
      objA.getMessage();

      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
      objB.getMessage();
   }
}

Ниже приведен файл конфигурации Beans.xml, необходимый для одноэлементной области действия.

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   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-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton">
   </bean>

</beans>

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

Your Message : I'm object A
Your Message : I'm object A

Объем прототипа

Если для области установлен прототип, контейнер Spring IoC создает новый экземпляр объекта каждый раз, когда выполняется запрос для этого конкретного компонента. Как правило, используйте область прототипа для всех bean-компонентов с полным состоянием и одноэлементную область для bean-компонентов без состояния.

Чтобы определить область действия прототипа, вы можете установить для свойства области значение prototype в файле конфигурации компонента, как показано в следующем фрагменте кода:

<!-- A bean definition with prototype scope -->
<bean id = "..." class = "..." scope = "prototype">
   <!-- collaborators and configuration for this bean go here -->
</bean>

пример

Давайте создадим рабочую среду Eclipse и выполните следующие шаги для создания приложения Spring:

меры Описание
1 Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте.
2 Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» .
3 Создайте классы Java HelloWorld и MainApp в пакете com.tutorialspoint .
4 Создайте файл конфигурации Beans Beans.xml в папке src .
5 Последний шаг — создать содержимое всех файлов Java и файла конфигурации Bean и запустить приложение, как описано ниже.

Вот содержимое файла HelloWorld.java

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

Ниже приводится содержание файла MainApp.java

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");

      objA.setMessage("I'm object A");
      objA.getMessage();

      HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
      objB.getMessage();
   }
}

Ниже приведен файл конфигурации Beans.xml, необходимый для области действия прототипа.

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   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-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype">
   </bean>

</beans>

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