[JAVA] Spring Autowired est écrit dans le constructeur

Aperçu

Les annotations Autowired utilisées lors de la DI au printemps sont faciles et pratiques à utiliser! Cependant, il existe plusieurs façons de l'utiliser, et je ne sais pas laquelle utiliser. Je l'utilise souvent dans les constructeurs, mais j'aimerais savoir comment cela s'est passé.

Comment configurer Autowired

Examen approximatif. Il existe trois façons de définir Autowired.

Injection sur le terrain

Il s'agit d'un type de méthode de déclaration qui est écrit directement dans le champ.

public class A {
    @Autowired
    private B b;
}

Injection de constructeur

C'est le type de méthode de déclaration à écrire dans le constructeur.

public class A {
    private final B b;

    @Autowired
    public A(B b) {
        this.b = b;
    }
}

Injection de poseur

Il s'agit d'un type de méthode de déclaration à écrire dans le setter.

public class A {
   private B b;
   
   @Autowired
   public void setB(B b) {
       this.b = b;
   }
}

Pourquoi choisir l'injection constructeur?

Vous pouvez utiliser final pour le terrain et garantir l'immuabilité. La raison en est excellente. En faisant cela, il est sûr car il ne sera pas réécrit au milieu du traitement. (Même si vous ne comprenez pas la maintenance, vous obtiendrez une erreur de compilation lors de la réécriture finale. Vraiment) De plus, c'est formidable que vous puissiez faire un nouveau test. Personnellement, je suis heureux de pouvoir choisir entre DI dans le test ou simplement nouveau.

Au contraire, il n'est pas bon d'utiliser l'injection de champ

En premier lieu, il n'est pas recommandé par le fonctionnaire. (Sûr) Il ne servirait à rien de l'utiliser.

Je ne fais pas confiance à la source de l'échantillon pour utiliser l'injection de champ. Je pense personnellement que ce n'est pas bon. (C'est vraiment facile)

Résumé

Utilisons l'injection de constructeur sans nous lasser de toute source.

Recommended Posts

Spring Autowired est écrit dans le constructeur
Qu'est-ce que @Autowired dans Spring Boot?
[Spring Boot] Jusqu'à ce que @Autowired soit exécuté dans la classe de test [JUnit5]
A quoi sert le constructeur?
Le traitement des événements est effectué au printemps.
Mémo après le premier projet Spring-What is Spring-
Quelle est la méthode principale en Java?
La version ruby est gérée dans le fichier .rbenv / version
Le type d'intersection introduit dans Java 10 est incroyable (?)
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Le nom officiel de Spring MVC est Spring Web MVC
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
La cible @Import est traitée comme @Configuration au printemps
Afficher la tâche Gradle dans le projet Spring Boot
Lorsque le projet n'est pas affiché dans eclipse
Ebean.update () n'est pas exécuté dans le modèle hérité.
Obtenez plusieurs ressources qui correspondent au modèle au printemps
Spécifiez le codage des ressources statiques dans Spring Boot
[Java] Comment omettre le constructeur privé dans Lombok
Dans Time.strptime,% j (date totale de l'année) est
Mécanisme de plug-in simple dans Spring, considérez également l'ordre
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Quel est le meilleur, Kotlin ou futur Java?
Y a-t-il une instance même si le constructeur échoue?
Créer la variable de clause where dans Spring Data JPA
Résumons pourquoi l'injection de constructeur est recommandée
[Android] La variable de liaison de données est écrite dans camelCase
ORA-08177 lorsque Spring Batch est exécuté en continu dans Oracle
[Erreur] L'application ne s'affiche pas dans l'environnement de production
Pourquoi la méthode get est nécessaire dans la classe Calendar
L'histoire que .java est également construite dans Unity 2018
Qu'est-ce qu'un constructeur
Qu'est-ce que Spring Tools 4
Utilisez Interceptor au printemps
Microservices dans Spring Cloud
Obtenez des cookies au printemps
Spring Boot 1.x atteindra EOL l'année prochaine.
Découvrez les spécifications tout en raccourcissant FizzBuzz écrit en Java
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Le cas où @Autowired n'a pas pu être utilisé dans JUnit5
Accéder dynamiquement à la propriété spécifiée par la chaîne dans Spring BeanWrapper
Quelle est la représentation de la connaissance du domaine dans le modèle [DDD]?
Comportement lorsque chacun est exécuté dans la plage inverse
[Spring Data JPA] L'ID personnalisé est attribué dans une séquence unique au moment de l'enregistrement.
Lancer une exception et attraper lorsqu'il n'y a pas de gestionnaire correspondant au chemin au printemps