@Qualifier 注解 Spring Boot 详解

@qualifier 注解 spring boot 详解

spring boot 中的 @qualifier 注解用于解决当您有多个相同类型的 bean 但想要注入特定的 bean 时出现的歧义。当存在多个候选者时,它可以帮助 spring 确定应该自动装配哪个 bean。

以下是 @qualifier 有用的所有常见场景,并附有示例:

场景 1:相同类型的多个 bean

您可能有多个相同类型的 bean,并且您想注入特定的一个。

示例:

import org.springframework.stereotype.component;@componentpublic class dog implements animal {    @override    public string sound() {        return "bark";    }}@componentpublic class cat implements animal {    @override    public string sound() {        return "meow";    }}

登录后复制

这里,dog 和 cat 都实现了 animal 接口。

@qualifier 的用法:

import org.springframework.beans.factory.annotation.autowired;import org.springframework.beans.factory.annotation.qualifier;import org.springframework.stereotype.service;@servicepublic class animalservice {    private final animal animal;    @autowired    public animalservice(@qualifier("cat") animal animal) {        this.animal = animal;    }    public string getanimalsound() {        return animal.sound();    }}

登录后复制

在此示例中,@qualifier(“cat”) 注解指定应将 cat bean 注入到 animalservice 中。如果没有 @qualifier,spring 会因歧义而抛出异常。

场景 2:将 @qualifier 与主要和次要 bean 一起使用

有时,您可能有一个“主要”bean 和其他不常用的 bean,但您仍然希望能够使用 @qualifier 注入特定的 bean。

示例:

@component@primarypublic class dog implements animal {    @override    public string sound() {        return "bark";    }}@componentpublic class cat implements animal {    @override    public string sound() {        return "meow";    }}

登录后复制

@primary 注解确保默认注入 dog。但你仍然可以使用@qualifier来注入cat。

使用@qualifier来覆盖@primary:

@servicepublic class animalservice {    private final animal animal;    @autowired    public animalservice(@qualifier("cat") animal animal) {        this.animal = animal;    }    public string getanimalsound() {        return animal.sound();    }}

登录后复制

在本例中,尽管 dog 被标记为 @primary,但由于 @qualifier 注解,cat bean 仍被注入。

场景 3:带有构造函数注入和字段注入的 @qualifier
@qualifier 可以与基于构造函数和基于字段的注入一起使用。

示例:使用 @qualifier 进行字段注入:

@servicepublic class animalservice {    @autowired    @qualifier("dog")    private animal animal;    public string getanimalsound() {        return animal.sound();    }}

登录后复制

在这种情况下,@qualifier(“dog”) 确保将 dog bean 注入到 animalservice 中。

场景 4:带有方法参数注入的 @qualifier

通过方法参数注入依赖时也可以使用@qualifier。

示例:

@servicepublic class animalservice {    private animal animal;    @autowired    public void setanimal(@qualifier("dog") animal animal) {        this.animal = animal;    }    public string getanimalsound() {        return animal.sound();    }}

登录后复制

这里,@qualifier(“dog”) 确保通过 setter 方法注入 dog bean。

场景 5:带有自定义注释的 @qualifier

您可以创建自定义限定符以避免硬编码 bean 名称,从而使代码更干净且更易于维护。

示例:自定义限定符:
创建自定义限定符:

import org.springframework.beans.factory.annotation.qualifier;import java.lang.annotation.retention;import java.lang.annotation.retentionpolicy;@qualifier@retention(retentionpolicy.runtime)public @interface dogqualifier {}

登录后复制

应用自定义限定符:

@component@dogqualifierpublic class dog implements animal {    @override    public string sound() {        return "bark";    }}@componentpublic class cat implements animal {    @override    public string sound() {        return "meow";    }}

登录后复制

使用自定义限定符注入:

@servicepublic class animalservice {    private final animal animal;    @autowired    public animalservice(@dogqualifier animal animal) {        this.animal = animal;    }    public string getanimalsound() {        return animal.sound();    }}

登录后复制

在这个例子中,@dogqualifier用于指定要注入哪个bean,而不是使用@qualifier(“dog”)。

场景 6:集合中的 @qualifier

在自动装配 bean 集合时可以使用 @qualifier,以确保只注入特定的 bean。

示例:

import org.springframework.beans.factory.annotation.qualifier;import org.springframework.stereotype.component;@component@qualifier("domestic")public class dog implements animal {    @override    public string sound() {        return "bark";    }}@component@qualifier("domestic")public class cat implements animal {    @override    public string sound() {        return "meow";    }}@componentpublic class lion implements animal {    @override    public string sound() {        return "roar";    }}

登录后复制

与集合一起使用:

@Servicepublic class AnimalService {    private final List animals;    @Autowired    public AnimalService(@Qualifier("domestic") List animals) {        this.animals = animals;    }    public void printAnimalSounds() {        animals.forEach(animal -> System.out.println(animal.sound()));    }}

登录后复制

在此示例中,仅注入 dog 和 cat beans,因为它们被标记为 @qualifier(“domestic”)。

摘要:

当存在多个相同类型的候选者时,@qualifier 有助于注入特定的 beans。

它用于构造函数注入、字段注入、方法注入、自定义限定符甚至集合等场景。

通过了解这些场景,您可以有效地使用 @qualifier 来解决歧义并管理 spring boot 应用程序中的 bean 注入。

以上就是@Qualifier 注解 Spring Boot 详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2609636.html

(0)
上一篇 2025年3月6日 20:53:52
下一篇 2025年3月6日 20:53:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Java函数与方法在安全性方面的对比

    java函数和方法在安全性上的差异主要在于访问权限修饰符。函数默认公开,任何类都可以调用,而方法与类具有相同的访问权限,通常是私有或受保护的,限制了未经授权的代码访问。最佳实践是尽量使用方法、应用适当的访问权限修饰符、处理异常和使用安全库/…

    2025年3月6日
    100
  • 微服务架构中Java函数可复用性的最佳实践

    在 java 微服务架构中实现函数可复用性的最佳实践包括:抽象和分离通用逻辑;使用依赖注入框架管理函数实例;利用工厂方法提供多种函数实现。 微服务架构中的 Java 函数可复用性的最佳实践 引言 微服务架构采用松散耦合的函数,这为可复用性提…

    2025年3月6日
    200
  • 面向方面编程如何增强Java函数的可复用性

    面向方面编程(aop)通过横切关注点增强 java 函数的可复用性:aop 将切面与业务逻辑分离,允许在需要时应用横切关注点;在 java 中,spring aop 和 aspectj 等框架提供创建切面的机制;切面使用注解或其他技术应用于…

    2025年3月6日
    200
  • SQL 查询速度慢?使用此技术提高应用程序的性能

    挑战 在我的应用程序(react + spring boot + oracle)中,处理大型数据集导致处理时间极其缓慢。我需要一种解决方案来提高性能而不影响准确性或完整性。 解决方案:ntile + 并行处理 ntile 是一个功能强大的 …

    2025年3月6日
    200
  • Express <> NextJS <> NestJS 初学者速查表

    简介 我最近必须学习 nestjs,为一个用它编写的项目做好准备。请注意,不是 nextjs,而是 nestjs。和你们中的一些人一样,我听说过它,但从未有机会实际使用它。它已经流行了一段时间了,今年早些时候赶上了 nodejs 后端开发的…

    2025年3月6日
    200
  • Spring Boot 注解解释:您应该了解的基本注解

    spring boot 通过抽象大部分样板配置,使开发基于 java 的应用程序变得异常容易。 spring boot 如此强大且用户友好的关键功能之一是它广泛使用注释。这些注释可帮助开发人员配置和管理他们的应用程序,而无需编写大型 xml…

    2025年3月6日
    200
  • Spring Data JPA 中的高级查询技术

    我们已经探索了 spring data jpa 的基础知识以及方法命名约定如何使查询变得简单。如果没有,我强烈建议您先关注该博客。在第二部分中,我们将深入研究更高级的查询技术,使您能够利用强大的组合、排序、分页和特定于字符串的操作来更好地控…

    2025年3月6日
    200
  • 成为爪哇英雄的路线图

    成为 Java 开发人员的路线图 第 1 步:学习基础知识 了解编程基础知识:从变量、数据类型、循环和条件等基本编程概念开始。核心 Java:学习 Java 基础知识,包括语法、面向对象编程 (OOP) 原理和基本数据结构。 第 2 步:加…

    2025年3月6日
    200
  • Java 集成测试中异常处理的注意事项

    Java 集成测试中异常处理的注意事项 在集成测试中,异常处理是一个至关重要的方面,可以确保测试用例在出现意外情况时继续执行,并提供有意义的信息。以下是一些需要注意的注意事项: 1. 异常捕获和断言 测试用例通常使用 try-catch 块…

    2025年3月6日
    200
  • Spring Boot 函数中异常处理的实现和配置

    spring boot 函数异常处理实现包括:使用 @responsestatus 注解指定异常的 http 状态代码。实现 responseentityexceptionhandler 类以定制异常处理过程。异常处理配置方式:注册 res…

    2025年3月6日
    200

发表回复

登录后才能评论