Maison > Java > javaDidacticiel > Pourquoi l'injection constructeur ou setter est-elle préférée à l'injection sur le terrain au printemps ?

Pourquoi l'injection constructeur ou setter est-elle préférée à l'injection sur le terrain au printemps ?

DDD
Libérer: 2024-12-08 01:54:12
original
332 Les gens l'ont consulté

Why Is Constructor or Setter Injection Preferred Over Field Injection in Spring?

Qu'est-ce que l'injection de champ et pourquoi elle n'est généralement pas préférée

Dans les applications Spring MVC et Portlet, l'injection de champ fait référence à la pratique consistant à injecter directement une dépendance dans un champ annoté avec @Autowired, comme démontré dans l'exemple suivant :

@Component
public class MyComponent {
    @Autowired
    private Cart cart;
}
Copier après la connexion

Comme alternative, l'injection de constructeur implique de transmettre la dépendance comme un paramètre dans le constructeur :

@Component
public class MyComponent {
    private final Cart cart;

    @Autowired
    public MyComponent(Cart cart) {
        this.cart = cart;
    }
}
Copier après la connexion

Avantages et inconvénients :

L'injection de constructeur offre plusieurs avantages :

  • Immuabilité : Il permet de créer des objets immuables, car les dépendances sont attribuées instanciation.
  • Couplage lâche : Les classes ont une dépendance plus lâche vis-à-vis du conteneur DI et peuvent être utilisées en dehors de celui-ci.
  • Testabilité : Les objets peuvent être instancié pour les tests unitaires sans avoir besoin de réflexion.

L'injection Setter est également une option, fournissant un mécanisme d'injection de dépendances qui peuvent être optionnelles ou modifiables dans le temps.

En revanche, l'injection de champ souffre de plusieurs inconvénients :

  • Couplage étroit : Elle crée un couplage étroit avec le conteneur DI.
  • Immuabilité : Cela entrave la création d'immuables objets.
  • Exigence de réflexion : Cela nécessite une réflexion pour l'instanciation en dehors du conteneur DI.
  • Dépendances cachées : Les dépendances réelles sont masquées de l'interface.
  • Trop de dépendances : Cela encourage l'ajout de dépendances excessives dépendances, violant le principe de responsabilité unique.

Directives d'injection :

Spring recommande les directives suivantes :

  • Utiliser l'injection de constructeur pour les dépendances obligatoires ou pour atteindre l'immuabilité.
  • Utilisez l'injection setter pour des options facultatives ou modifiables. dépendances.
  • Éviter l'injection de champ dans la plupart des cas.

Conclusion :

Compte tenu des inconvénients de l'injection de champ, il est généralement conseillé de privilégier l'injection constructeur ou passeur. La commodité de l’injection sur le terrain est contrebalancée par ses inconvénients et limites potentiels.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal