Синглтон и Прототипы в Spring
Когда говорят о скоупах (областях видимости) бинов в Spring, обычно рассматривают два наиболее часто используемых типа — это Singleton (синглтон) и Prototype (прототип). Они определяют, как и когда создаются экземпляры объектов (бинов) и как управляется их временем жизни в приложении. Понимание различий между этими скоупами помогает разработчикам эффективно управлять ресурсами и объектами в приложении.
Что такое скоуп (Scope) бина?
Скоуп бина определяет жизненный цикл и количество экземпляров бина в контейнере Spring. Он регулирует, сколько объектов будет создано и как долго эти объекты будут существовать. Spring поддерживает несколько различных скоупов, но на практике наиболее популярными являются:
Singleton — бин создается один раз и существует на протяжении всего времени работы контейнера Spring.
Prototype — новый экземпляр бина создается каждый раз при запросе.
Singleton Scope (Синглтон)
Синглтон — это скоуп по умолчанию в Spring. Когда бин имеет скоуп синглтона, контейнер создает только один его экземпляр для всего приложения. Этот бин будет использоваться повторно при каждом обращении к нему в течение времени работы приложения.
Пример использования синглтона
Создадим класс, который представляет собой сервис для отправки сообщений:
Теперь создадим приложение, которое использует этот бин несколько раз:
Когда использовать Singleton?
Синглтон хорош для использования в ситуациях, когда объект должен быть уникален для всего приложения и его состояние не должно изменяться между различными вызовами.
Примеры:
Сервисы, которые обеспечивают кэширование данных.
Сервисы для доступа к базе данных, где создаётся пул соединений.
Управляющие объекты, которые контролируют общий процесс приложения.
#Java #Training #Spring #Spring_Singleton
Когда говорят о скоупах (областях видимости) бинов в Spring, обычно рассматривают два наиболее часто используемых типа — это Singleton (синглтон) и Prototype (прототип). Они определяют, как и когда создаются экземпляры объектов (бинов) и как управляется их временем жизни в приложении. Понимание различий между этими скоупами помогает разработчикам эффективно управлять ресурсами и объектами в приложении.
Что такое скоуп (Scope) бина?
Скоуп бина определяет жизненный цикл и количество экземпляров бина в контейнере Spring. Он регулирует, сколько объектов будет создано и как долго эти объекты будут существовать. Spring поддерживает несколько различных скоупов, но на практике наиболее популярными являются:
Singleton — бин создается один раз и существует на протяжении всего времени работы контейнера Spring.
Prototype — новый экземпляр бина создается каждый раз при запросе.
Singleton Scope (Синглтон)
Синглтон — это скоуп по умолчанию в Spring. Когда бин имеет скоуп синглтона, контейнер создает только один его экземпляр для всего приложения. Этот бин будет использоваться повторно при каждом обращении к нему в течение времени работы приложения.
Пример использования синглтона
Создадим класс, который представляет собой сервис для отправки сообщений:
import org.springframework.stereotype.Component;
@Component
public class MessageService {
public MessageService() {
System.out.println("Создан объект MessageService");
}
public void sendMessage(String message) {
System.out.println("Отправка сообщения: " + message);
}
}
Теперь создадим приложение, которое использует этот бин несколько раз:
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// Получаем бин MessageService дважды
MessageService service1 = context.getBean(MessageService.class);
service1.sendMessage("Привет, Spring!");
MessageService service2 = context.getBean(MessageService.class);
service2.sendMessage("Второе сообщение");
// Проверим, что оба объекта одинаковы
System.out.println(service1 == service2); // true
}
}
В данном случае Spring создает только один экземпляр MessageService, и каждый раз при запросе через context.getBean() возвращается один и тот же объект. Сообщение в консоли "Создан объект MessageService" будет выведено только один раз.
Когда использовать Singleton?
Синглтон хорош для использования в ситуациях, когда объект должен быть уникален для всего приложения и его состояние не должно изменяться между различными вызовами.
Примеры:
Сервисы, которые обеспечивают кэширование данных.
Сервисы для доступа к базе данных, где создаётся пул соединений.
Управляющие объекты, которые контролируют общий процесс приложения.
#Java #Training #Spring #Spring_Singleton
Что выведет код?
Задача по Spring. Тема: #Spring_Prototype и #Spring_Singleton. Сложность средняя.
Подробный разбор через 30 минут!🫡
#TasksSpring
Задача по Spring. Тема: #Spring_Prototype и #Spring_Singleton. Сложность средняя.
import org.springframework.context.annotation.*;
@Configuration
class Config {
@Bean
@Scope("singleton")
public MyBean2310 singletonBean() {
return new MyBean2310("singleton");
}
@Bean
@Scope("prototype")
public MyBean2310 prototypeBean() {
return new MyBean2310("prototype");
}
}
class MyBean2310 {
public MyBean2310(String scope) {
System.out.println("MyBean created for "+scope);
}
}
public class Task231024_2 {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
MyBean2310 singleton1 = context.getBean("singletonBean", MyBean2310.class);
MyBean2310 singleton2 = context.getBean("singletonBean", MyBean2310.class);
MyBean2310 prototype1 = context.getBean("prototypeBean", MyBean2310.class);
MyBean2310 prototype2 = context.getBean("prototypeBean", MyBean2310.class);
context.close();
}
}
#TasksSpring