Поговорим о одноэлементном режиме Springboot
Поговорим о одноэлементном режиме Springboot

В Spring Boot и более широкой среде Spring шаблон Singleton играет центральную роль, особенно в жизненном цикле и управлении bean-компонентами Spring. Здесь мы подробно обсудим принцип работы, преимущества и потенциальные проблемы шаблона Singleton в Spring Boot.

Основные понятия шаблона Singleton

Шаблон Singleton — это шаблон проектирования, который гарантирует существование только одного экземпляра класса и предоставляет глобальную точку доступа для доступа к этому экземпляру. Реализация шаблона Singleton в Java обычно включает в себя:

  • Частный конструктор (предотвращает внешний доступ new Создать экземпляр).
  • Статическая переменная-член, в которой хранятся экземпляры класса.
  • Открытый статический метод, предоставляющий глобальную точку доступа.

Шаблон Singleton в Spring Boot

существовать Spring В рамках фреймворка проходит одноэлементный режим Bean из Возможности достижения,singleton да Spring Поддерживаемые области по умолчанию. При определении Bean Когда, весна Контейнер создаст единственный экземпляр всех Bean Все запросы будут возвращать один и тот же экземпляр. Этот подход упрощает традиционную реализацию синглтона, делая ее более удобной в управлении и поточно-безопасной.

Реализация шаблона Singleton

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

Java-код копирования

Язык кода:javascript
копировать
import org.springframework.stereotype.Component;

@Component
public class SingletonService {
    // Экземпляр класса из Бизнес-логики
}

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

преимущество

  1. Оптимизация ресурсов:Поскольку экземпляр создается только один раз,Таким образом можно оптимизировать использование памяти и снизить частоту сборки мусора.
  2. Общий статус:Синглтоны могут удобносуществоватьдругойиз Компонентная комната Общий информация о состоянии, такая как данные конфигурации или кэш.
  3. Уменьшите накладные расходы на создание дубликатов объектов.:особеннода Для приложений, требующих обширных вычислений、Потребляйте ресурсы для создания объектов.

недостаток

  1. Проблемы глобального управления государством:Глобальный режим Singletonизстатус возможенбудетдругойиз Изменения в клиентском коде,Это приводит к непредсказуемому поведению приложения.
  2. Модульное тестирование — это сложно:Синглтониз Глобальное состояние усложняет модульное тестирование,Поскольку статус теста может быть разделен между тестами,Независимость теста не может быть гарантирована.
  3. Не подходит для многопоточных сред.:нравитьсяфрукты Синглтон Класс неправильно обрабатывает механизм синхронизации.,Статус экземпляра может быть неправильным в многопоточной среде.

Реализация синглтона в Spring Boot

Spring Boot Используйте внедрение зависимостей (DI) для управления компонентами (т. е. Бобы). Когда вы отмечаете класс как @Component(или другие производныеизаннотация,нравиться @Service@Repository и др.), Весна По умолчанию это создается и управляется в одноэлементном режиме. Бобы. Это означает, что независимо от того, где в вашем приложении вы введете это Бин, получит тот же экземпляр.

пример кода

Предположим, у нас есть простой класс обслуживания, который мы хотим сохранить как синглтон в приложении Spring Boot.

Сначала определите интерфейс сервиса и его реализацию:

Java-код копирования

Язык кода:javascript
копировать
import org.springframework.stereotype.Service;

public interface GreetingService {
    String greet(String name);
}

@Service
public class GreetingServiceImpl implements GreetingService {
    @Override
    public String greet(String name) {
        return "Hello, " + name + "!";
    }
}

существуют В этом примере,GreetingServiceImpl Класс с аннотациями @Service аннотация, что означает Spring автоматически зарегистрирует его как Bean И управляется в одноэлементном режиме.

Затем,существовать В любом месте, где вам нужно использовать эту услугу из,ты можешь использовать @Autowired аннотация для внедрения этого синглтона:

Java-код копирования

Язык кода:javascript
копировать
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    private final GreetingService greetingService;

    @Autowired
    public MyComponent(GreetingService greetingService) {
        this.greetingService = greetingService;
    }

    public void execute() {
        System.out.println(greetingService.greet("World"));
    }
}

существуют В этом примере,MyComponent Получено путем внедрения конструктора GreetingService пример. Независимо от того, сколько раз вы создаете MyComponent например, введенный GreetingService все это один и тот же экземпляр, поскольку он используется в одноэлементном режиме Spring удалось.

преимуществоинедостаток

преимущество:

  1. Использование ресурсов является высоким, поскольку экземпляры создаются только один раз.
  2. Уменьшите накладные расходы на производительность системы.
  3. Доступен глобально из любого другого места в системе.

недостаток:

  1. Если одноэлементные классы управляются неправильно, могут возникнуть конфликты использования ресурсов.
  2. существование может вызвать проблемы в многопоточных средах,Если одноэлементный класс не синхронизирован правильно.

существовать Spring Boot Использование шаблона Singleton в вашем приложении может значительно упростить управление компонентами и внедрение зависимостей, сохраняя при этом эффективное и согласованное управление состоянием сервиса.

Подвести итог

Шаблон Singleton в Spring Загрузка по Spring в рамке IOC Контейнер берет на себя управление, что делает реализацию синглтона простой и безопасной. это да Spring Конструкция рамыизосновная часть,Подходит для большинства сервисов и компонентов управления. Однако,Разработчикам по-прежнему необходимо осознавать проблемы, которые возникают при глобальном управлении состоянием и использовании многопоточности. существуют При проектировании и применении,Разумное использование одноэлементного режима может повысить эффективность и производительность приложения.,Но связанные с этим вопросы проектирования также требуют тщательного решения.

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024.,Приходите и разделите приз со мной!

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.