L'annotation @Qualifier dans Spring Boot est utilisée pour résoudre l'ambiguïté lorsque vous avez plusieurs beans du même type mais que vous souhaitez en injecter un spécifique. Cela aide Spring à déterminer quel bean doit être automatiquement câblé lorsque plusieurs candidats existent.
Voici tous les scénarios courants dans lesquels @Qualifier est utile avec des exemples :
Scénario 1 : plusieurs beans du même type
Vous pouvez avoir plusieurs beans du même type et vous souhaitez en injecter un spécifique.
Exemple :
import org.springframework.stereotype.Component; @Component public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
Ici, Chien et Chat implémentent l'interface Animal.
Utilisation de @Qualifier :
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@Qualifier("cat") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dans cet exemple, l'annotation @Qualifier("cat") spécifie que le bean Cat doit être injecté dans AnimalService. Sans @Qualifier, Spring lèverait une exception en raison d'une ambiguïté.
Scénario 2 : Utilisation de @Qualifier avec des beans primaires et secondaires
Parfois, vous pouvez avoir un bean "primaire" et d'autres qui sont moins fréquemment utilisés, mais vous souhaitez quand même pouvoir injecter les spécifiques avec @Qualifier.
Exemple :
@Component @Primary public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
L'annotation @primary garantit que Dog est injecté par défaut. Mais vous pouvez toujours utiliser @Qualifier pour injecter Cat.
Utilisation de @Qualifier pour remplacer @primary :
@Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@Qualifier("cat") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dans ce cas, bien que Dog soit marqué comme @primary, le haricot Cat est injecté en raison de l'annotation @Qualifier.
Scénario 3 : @Qualifier avec injection de constructeur et injection de champ
@Qualifier peut être utilisé avec une injection basée sur le constructeur et sur le terrain.
Exemple : Injection de champ avec @Qualifier :
@Service public class AnimalService { @Autowired @Qualifier("dog") private Animal animal; public String getAnimalSound() { return animal.sound(); } }
Dans ce cas, le @Qualifier("dog") s'assure que le haricot Dog est injecté dans l'AnimalService.
Scénario 4 : @Qualifier avec injection de paramètres de méthode
Vous pouvez également utiliser @Qualifier lors de l'injection de dépendances via des paramètres de méthode.
Exemple :
@Service public class AnimalService { private Animal animal; @Autowired public void setAnimal(@Qualifier("dog") Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Ici, @Qualifier("dog") garantit que le haricot Dog est injecté via la méthode setter.
Scénario 5 : @Qualifier avec annotations personnalisées
Vous pouvez créer des qualificatifs personnalisés pour éviter de coder en dur les noms de beans, ce qui rend le code plus propre et plus maintenable.
Exemple : Qualificateur personnalisé :
Créez un qualificatif personnalisé :
import org.springframework.beans.factory.annotation.Qualifier; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Qualifier @Retention(RetentionPolicy.RUNTIME) public @interface DogQualifier { }
Appliquer le qualificatif personnalisé :
@Component @DogQualifier public class Dog implements Animal { @Override public String sound() { return "Bark"; } } @Component public class Cat implements Animal { @Override public String sound() { return "Meow"; } }
Injecter à l'aide du qualificatif personnalisé :
@Service public class AnimalService { private final Animal animal; @Autowired public AnimalService(@DogQualifier Animal animal) { this.animal = animal; } public String getAnimalSound() { return animal.sound(); } }
Dans cet exemple, @DogQualifier est utilisé pour spécifier quel bean injecter, au lieu d'utiliser @Qualifier("dog").
Scénario 6 : @Qualifier dans les collections
Vous pouvez utiliser @Qualifier lors du câblage automatique d'une collection de beans pour vous assurer que seuls des beans spécifiques sont injectés.
Exemple :
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"; } } @Component public class Lion implements Animal { @Override public String sound() { return "Roar"; } }
Utilisation avec une collection :
@Service public class AnimalService { private final List<animal> animals; @Autowired public AnimalService(@Qualifier("domestic") List<animal> animals) { this.animals = animals; } public void printAnimalSounds() { animals.forEach(animal -> System.out.println(animal.sound())); } } </animal></animal>
Dans cet exemple, seuls les haricots Dog et Cat sont injectés car ils sont marqués du @Qualifier("domestic").
Résumé :
@Qualifier aide à injecter des beans spécifiques lorsqu'il existe plusieurs candidats du même type.
Il est utilisé dans des scénarios tels que l'injection de constructeur, l'injection de champ, l'injection de méthode, les qualificatifs personnalisés et même avec des collections.
En comprenant ces scénarios, vous pouvez utiliser @Qualifier efficacement pour résoudre les ambiguïtés et gérer l'injection de bean dans une application Spring Boot.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

JVM implémente les fonctionnalités WORA de Java via l'interprétation des bytecodes, les API indépendantes de la plate-forme et le chargement de classe dynamique: 1. ByteCode est interprété comme du code machine pour assurer le fonctionnement de la plate-forme multiplié; 2. Différences de système d'exploitation abstraites API standard; 3. Les classes sont chargées dynamiquement au moment de l'exécution pour assurer la cohérence.

La dernière version de Java résout efficacement les problèmes spécifiques à la plate-forme grâce à l'optimisation JVM, aux améliorations de la bibliothèque standard et à la prise en charge de la bibliothèque tierce. 1) L'optimisation JVM, comme le ZGC de Java11, améliore les performances de la collecte des ordures. 2) Améliorations standard des bibliothèques, telles que le système de module de Java9, réduisant les problèmes liés à la plate-forme. 3) Les bibliothèques tierces fournissent des versions optimisées à plateforme, telles que OpenCV.

Le processus de vérification Bytecode de JVM comprend quatre étapes de clé: 1) Vérifiez si le format de fichier de classe est conforme aux spécifications, 2) vérifiez la validité et l'exactitude des instructions de bytecode, 3) effectuer une analyse du flux de données pour assurer la sécurité du type et 4) équilibrant la minutie et les performances de la vérification. Grâce à ces étapes, le JVM garantit que seul le bytecode sécurisé est exécuté, protégeant ainsi l'intégrité et la sécurité du programme.

Java'splatformIndependenceNallowsApplicationStorunonanyOperatingSystemwithajvm.1) singlecodeBase: writeAndCompileonceForAllPlatFatForms.2) Easyupdates: UpdateByteCodeForsImulTaneousDoyment.4)

L'indépendance de la plate-forme de Java est continuellement améliorée grâce à des technologies telles que JVM, la compilation JIT, la normalisation, les génériques, les expressions Lambda et ProjectPanama. Depuis les années 1990, Java est passé de la JVM de base à la JVM moderne haute performance, garantissant la cohérence et l'efficacité du code sur différentes plates-formes.

Comment Java atténue des problèmes spécifiques à la plate-forme? Java implémente la plate-forme indépendante de la plate-forme via JVM et des bibliothèques standard. 1) Utilisez Bytecode et JVM pour abstraction des différences du système d'exploitation; 2) La bibliothèque standard fournit des API multiplateformes, telles que les chemins de fichier de traitement des classes de chemins et le codage des caractères de traitement de la classe Charset; 3) Utilisez des fichiers de configuration et des tests multiplateformes dans les projets réels pour l'optimisation et le débogage.

Java'splatformIndependanceNhancesMicRoservices ArchitectureByoFerringDeploymentFlexibilité, cohérence, évolutivité, etportabilité.1) DeploymentFlexibilityAllowsMicroserviceStorUnonanyPlatformwithajvm.2) CohérenceaCossserviceSiceSIGLYPLATFORMWithajvm.2)

Graalvm améliore l'indépendance de la plate-forme de Java de trois manières: 1. Interopérabilité transversale, permettant à Java d'interopérer de manière transparente avec d'autres langues; 2. 3. Optimisation des performances, le compilateur Graal génère un code machine efficace pour améliorer les performances et la cohérence des programmes Java.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Dreamweaver Mac
Outils de développement Web visuel
