Весенние аннотации: подробное объяснение @Qualifier!
Весенние аннотации: подробное объяснение @Qualifier!

Предисловие

В контейнере IoC среды Spring.,Когда имеется несколько бобов одного и того же типа,@QualifierАннотации служат для дифференциации и управления этимиBeanважный инструмент。Он предоставляет способ явно указать цели внедрения зависимостей.,Повышенная читаемость и удобство сопровождения кода.

краткое содержание

В этой статье будет подробно представлено@QualifierКак использовать аннотации、Принцип работы и применение в реальной разработке. Путем углубленного анализа исходного кода、Богатые варианты использования и анализ сценариев,и всестороннее рассмотрение превосходства,Читатели смогут глубоко понять@Qualifierпрактичность игибкость。

Обзор

@QualifierАннотация используется для указания конкретногоBeanаннотация,Когда имеется несколько бобов одного и того же типа,Он помогает контейнеру Spring определить точную цель внедрения зависимостей.

Анализ исходного кода

@QualifierРеализация аннотаций зависит отSpringмеханизм внедрения зависимостей。когдаSpringКонтейнер разрешается@QualifierПри аннотации,Он будет использовать значение аннотации как часть имени компонента.,чтобы убедиться, что введен правильный компонент Bean.

Обмен вариантами использования

Предположим, у нас есть две реализации одного и того же интерфейса.PaymentServiceизBean,мы можем использовать@Qualifierаннотации, чтобы отличить их:

Язык кода:java
копировать
@Service
public class CreditCardPaymentService implements PaymentService {
    // Детали реализации
}

@Service
public class PayPalPaymentService implements PaymentService {
    // Детали реализации
}

// Куда необходимо внедрить PaymentService
@Autowired
@Qualifier("creditCardPaymentService")
private PaymentService paymentService;

В этом примере,@QualifierаннотацияубеждатьсявпрыснутыйиздаCreditCardPaymentService

Сценарии применения

на платформе электронной коммерции,Могут существовать несколько способов оплаты,Каждый способ оплаты реализует одно и то жеPaymentServiceинтерфейс。использовать@QualifierМожно указать явноиспользовать Какой платежный сервис:

Язык кода:java
копировать
public class OrderService {

    @Autowired
    @Qualifier("preferredPaymentService")
    private PaymentService paymentService;

    public void processOrder(Order order) {
        // Используйте внедренный PaymentService для обработки платежей по заказам.
        paymentService.processPayment(order);
    }
}

Что касается приведенного выше примера кода, здесь я дам вам подробный анализ кода, который поможет вам понять его более тщательно и помочь вам освоить его как можно скорее.

анализ кода

этот абзацJavaКод демонстрирует, какSpringв рамкеиспользовать@Autowiredи@QualifierАннотации для реализации внедрения зависимостей,И убедитесь, что внедрен конкретный компонент. Вот подробный анализ этого кода:

  1. OrderService**добрый**:это Служитьдобрый,Отвечает за обработку логики оплаты заказов.
  2. @Autowired**аннотация**:этотаннотациядля автоматического впрыскаSpringв контейнереизBean。существовать Поленачальствоиспользовать@Autowired,Контейнер Spring автоматически внедрит соответствующие bean-компоненты в зависимости от типа.
  3. @Qualifier("preferredPaymentService")**аннотация**:Когда имеется несколько бобов одного и того же типа,@Qualifierаннотация Используется для указания того, какой из них следует внедрить.Bean。В этом примере,этоубеждатьсяинъекцияизда名为preferredPaymentServiceизPaymentService Bean。
  4. paymentService**Поле**:этоPaymentServiceдобрыйформаизчастный Поле,Используется для хранения внедренных компонентов платежной службы.
  5. processOrder**метод**:этотметодполучитьOrderобъект,ивызовинъекцияизPaymentServiceизprocessPaymentметодобработать заказизплатить。

Сценарии использования

Этот код подходит для сценариев, когда в приложении Spring необходимо обрабатывать несколько платежных сервисов. Например,На платформе электронной коммерции,Возможно, потребуется интегрировать несколько способов оплаты.,Реализованы все способы оплатыPaymentServiceинтерфейс。

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

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

  • ясность:проходить@Qualifierаннотация,Точная цель внедрения зависимостей может быть явно указана.,Избегайте двусмысленности.
  • гибкость:Разрешить разработчикамSpringв контейнере注册多个相同добрыйформаизBean,И выберите, какой из них использовать в соответствии с вашими потребностями.

недостаток

  • сложность:Есть многоBeanКогда необходимо различать,Может усложнить настройку,Неуправляемый.

тестовый пример

В реальной разработке этот код можно протестировать следующими способами:

  1. Запустить приложение:бегатьSpringприложение,убеждатьсяOrderService Компонент создан правильно.
  2. Отправить запрос на обработку заказа:проходитькаким-то образом(Например,проходитьконтроллерметод)вызовOrderServiceизprocessOrderметод。
  3. Подтвердить обработку платежа:убеждатьсяPaymentServiceизвыполнить(В этом случаеpreferredPaymentService)будь праввызов,и обрабатывать платежи по заказам.

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

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

  • ясность:提供了一种明确指定依赖инъекция目标изметод。
  • гибкость:позволятьсуществоватьбегатьдинамический выборBean。

недостаток

  • сложность:Есть многоBeanКогда необходимо различать,Может усложнить настройку。

Введение в основные методы класса

@Qualifierаннотацияизосновнойсуществовать Юй Ци и@Autowiredаннотацияизобъединитьиспользовать,Предоставляет возможность указывать определенные bean-компоненты во время внедрения зависимостей.

тестовый пример

Ниже приведен простой тест пример,покажи какиспользовать@Qualifierаннотация:

Язык кода:java
копировать
public class QualifierDemo {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(AppConfig.class);
        context.refresh();

        OrderService orderService = context.getBean(OrderService.class);
        orderService.processOrder(new Order());
    }
}

@Configuration
public class AppConfig {
    @Bean
    @Qualifier("creditCard")
    public PaymentService creditCardPaymentService() {
        return new CreditCardPaymentService();
    }

    @Bean
    @Qualifier("paypal")
    public PaymentService paypalPaymentService() {
        return new PayPalPaymentService();
    }

    @Bean
    public OrderService orderService() {
        OrderService service = new OrderService();
        // Используйте @Qualifier, чтобы указать внедренный компонент.
        service.setPaymentService(creditCardPaymentService());
        return service;
    }
}

@Service
public class OrderService {
    private PaymentService paymentService;

    public void setPaymentService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    public void processOrder(Order order) {
        paymentService.processPayment(order);
    }
}

Что касается приведенного выше примера кода, здесь я дам вам подробный анализ кода, который поможет вам понять его более тщательно и помочь вам освоить его как можно скорее.

анализ кода

этот абзацJavaКод демонстрирует, какSpringв рамкеиспользовать@Qualifierаннотациярешить具有多个выполнитьдобрыйиз依赖инъекция问题。以下да对этот абзацкодиз Детальный анализ:

  1. QualifierDemo**добрый**:этотдобрый Содержит программуизточка входаmainметод。Сначала он создаетAnnotationConfigApplicationContextдобрыйформаизSpringконтекст приложения。
  2. context.register(AppConfig.class);:Эта строка кода будетAppConfigдобрый Зарегистрируйтесь, чтобыSpringконтекст приложениясередина。AppConfigда一个Конфигурациядобрый,этоиспользовать@Configurationаннотация,Указывает, что он содержит определение компонента.
  3. context.refresh();:Эта строка кода инициализируетSpringконтекст приложения,Создание триггерного компонента и внедрение зависимостей.
  4. OrderService orderService = context.getBean(OrderService.class);:проходитьвызовgetBeanметод,отSpringконтекст приложениясередина获取OrderServiceдобрыйформаизBean。
  5. orderService.processOrder(new Order());:вызовOrderServiceизprocessOrderметод,Передай новыйизOrderобъект。
  6. AppConfig**добрый**:это Конфигурациядобрый,этоиспользовать@Configurationаннотация。он содержит два@Beanаннотацияизметод,分别创建и返回不同добрыйформаизPaymentService Bean,ииспользовать@Qualifierаннотации, чтобы отличить их。
  7. @Qualifier**аннотация**:существоватьAppConfigдобрыйсередина,@Qualifierаннотацияиспользуется для указания каждогоPaymentService Имя bean-компонента, чтобы его можно было четко различить при внедрении зависимостей.
  8. OrderService**добрый**:это Служитьдобрый,этоиспользовать@Serviceаннотация。он содержитPaymentServiceдобрыйформаизпеременные-члены,и метод установки этой переменной.
  9. processOrder**метод**:OrderServiceизprocessOrderметодполучитьOrderобъект,ивызовPaymentServiceизprocessPaymentметод来处理платить。

Сценарии использования

этот абзацкод演示了существоватьSpringв рамке如何проходить@Qualifierаннотациярешить Когда имеется несколько бобов одного и того же типаиз依赖инъекция问题。этотсуществоватьвыполнить多种платить方式或其他多种выполнитьдобрыйиз Очень полезно для бизнес-логики。

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

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

  • ясность:проходить@Qualifierаннотация,Точная цель внедрения зависимостей может быть явно указана.,Избегайте двусмысленности.
  • гибкость:Разрешить разработчикамSpringв контейнере注册多个相同добрыйформаизBean,И выберите, какой из них использовать в соответствии с вашими потребностями.

недостаток

  • сложность:Есть многоBeanКогда необходимо различать,Может усложнить настройку,Неуправляемый.

тестовый пример

В реальной разработке этот код можно протестировать следующими способами:

  1. Запустить приложение:бегатьQualifierDemoдобрыйизmainметод,Запустите контекст приложения Spring.
  2. Проверка создания компонента:Проверьте вывод консоли,подтверждатьOrderService Был ли бин успешно создан и обработан заказ.
  3. Подтвердить обработку платежа:убеждатьсяPaymentServiceизвыполнить(В этом случаеcreditCardPaymentService)будь праввызов。

краткое содержание

@QualifierаннотациядаSpringИспользуется в рамках для различения имен с одинаковым именем.Beanважный инструмент。проходить Эта статьяизизучать,мы узнали, какиспользовать@Qualifierаннотация来指定依赖инъекцияизточная цель,Тем самым улучшая читаемость и ремонтопригодность кода.

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

@QualifierаннотациядаSpringБольшая обработка в рамкахBeanКонфликт определенийизэффективный инструмент。этопроходитьпредоставить четкоеиз Укажите метод,Помогает разработчикам разрешать неоднозначности при внедрении зависимостей. Однако,Разработчикам необходимо обратить внимание на возможные последствия при его использовании.,И используйте его разумно в соответствии с реальными потребностями. Благодаря углубленному анализу и практике в этой статье,Мы надеемся помочь разработчикам более эффективно использовать@Qualifier,Создавайте чистые и эффективные приложения Spring.

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 позволяет экспортировать с сохранением двух десятичных знаков.