Dévoiler les nuances du printemps @Autowired : un guide complet
Dans le royaume du printemps, @Autowired se présente comme une annotation puissante qui simplifie câblage du bean, épargnant aux développeurs les configurations manuelles des fichiers XML. Cependant, comprendre son fonctionnement complexe peut être une tâche déroutante pour les non-initiés.
Exemple d'analyse
Considérez les exemples de code fournis :
public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } } public class MovieRecommender { private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public void prepare(MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) { this.movieCatalog = movieCatalog; this.customerPreferenceDao = customerPreferenceDao; } }
Dans ces exemples, @Autowired injecte des dépendances de bean dans des champs ou des méthodes de définition. En spécifiant que les beans doivent être câblés automatiquement, Spring détecte et associe automatiquement les beans nécessaires, soulageant ainsi les développeurs du câblage explicite des beans.
Comprendre le câblage automatique
Pour activer le câblage automatique, Spring effectue analyse des composants basée sur le package de base fourni, détectant les classes annotées (par exemple, @Component, @Controller) en tant que beans potentiels. Au cours du processus d'analyse, les annotations @Autowired sont identifiées, marquant les propriétés ou les méthodes comme points d'injection.
Lorsque les beans sont créés, Spring parcourt les propriétés ou les méthodes autowired, à la recherche de beans de types correspondants. Si plusieurs beans du même type existent, une exception est levée à moins que @Qualifier soit utilisé pour spécifier le bean souhaité.
Exemples de câblage automatique
Pour illustrer les scénarios de câblage automatique, considérez l'exemple suivant :
interface Color { void design(); } class Red implements Color { @Override public void design() { // Red design logic } } class Blue implements Color { @Override public void design() { // Blue design logic } } class MainClass { @Autowired private Color color; public static void main(String[] args) { MainClass mainClass = new MainClass(); mainClass.color.design(); // Red or Blue? } }
Dans cet exemple, Rouge et Bleu implémentent l'interface Color. L'annotation @Autowired sur MainClass.color indique que Spring doit automatiquement injecter une instance de l'interface Color. Cependant, sans conseils supplémentaires, Spring ne peut pas déterminer quelle implémentation spécifique injecter.
Pour résoudre cette ambiguïté, il faut exploiter les annotations @Qualifier ou @Resource :
Utiliser @Qualifier
@Qualifier("redBean") class Red implements Color {} @Qualifier("blueBean") class Blue implements Color {}
Lorsqu'il est utilisé dans MainClass, @Qualifier restreint les choix de câblage automatique, garantissant que l'implémentation Red est utilisé.
Utilisation de @Resource
@Resource(name="redBean") private Color color;
@Resource combine les annotations @Autowired et @Qualifier, en injectant le bean nommé "redBean".
Bonnes pratiques
Pour des pratiques de câblage automatique optimales, tenez compte de ces directives :
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!