[JAVA] Comment définir l'injection de dépendance Spring Boot (DI)

Nous avons résumé comment configurer l'injection de dépendances pour Spring Framework.

Spécification de la cible de numérisation du composant

Par défaut, les packages de la même hiérarchie que les packages de la classe avec @ ComponentScan sont analysés. Si vous souhaitez analyser d'autres classes, spécifiez le nom du package dans scanBasePackage.

// @Il peut également être spécifié pour les annotations composées telles que SpringBootApplication.
@ComponentScan(scanBasePackages={"com.example"})

Réglage de l'injection de dépendance (DI)

Lors de l'utilisation de l'annotation Spring

Définissez l'objet dépendant en tant que membre de private`` final, et définissez le constructeur qui reçoit l'objet dépendant comme argument dans le constructeur. Lors de l'utilisation de Lombok, cela peut être décrit comme suit.

Définition des composants
@Component
class ComponentA { ...
Paramètres DI
@RequiredArgsConstructor
class ClassA {
	// @Le câblage automatique peut être omis.
	private final ComponentA componentA;
	...

Auparavant, il était courant de spécifier «@ Autowired» pour les membres non «finaux» ou leurs Setters.

class ClassA {
	@Autowired
    private ComponentA componentA;
	...
class ClassA {
	private ComponentA componentA;
	@Autowired
	public void setComponentA(ComponentA componenA) {
		...

Actuellement, cela est recommandé car l'utilisation du constructeur présente les avantages suivants.

Lors de l'utilisation de l'annotation JSR-330

Puisqu'il s'agit d'un standard Java, il est facile de passer à un autre conteneur DI.

Définition des composants
@Named //Ou@ManagedBean
class ComponentA { ... }
Paramètres DI

Spécifiez @ Inject dans le constructeur (ou Setter). (Le poseur est également acceptable.)

@RequiredArgsConstructor(onConstructor=@__(@Inject))
class ClassA {
	private final ComponentA componentA;
	...

Vous pouvez également spécifier «@ Inject» comme membre.

class ClassA {
	@Inject
	private ComponentA componentA;
    ...

référence

Recommended Posts

Comment définir l'injection de dépendance Spring Boot (DI)
Comment configurer Spring Boot + PostgreSQL
Spring Boot - Comment définir le délai d'expiration de la session
Introduction à Spring Boot ① ~ DI ~
Comment écrire un test unitaire pour Spring Boot 2
[Spring Boot] Comment créer un projet (pour les débutants)
Comment utiliser ModelMapper (Spring boot)
[Java] [Spring] Spring Boot Mystérieux hamarinet d'injection de dépendances
Comment créer un hinadan pour un projet Spring Boot à l'aide de SPRING INITIALIZR
Nécessaire pour iOS 14? Comment définir NSUserTrackingUsageDescription
Comment diviser un fichier de message Spring Boot
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Comment réduire l'image de Spring Boot Docker
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Comment ajouter un chemin de classe dans Spring Boot
[Java] (pour MacOS) Méthode de définition du chemin de classe
Comment se lier avec un fichier de propriétés dans Spring Boot
[Spring Boot] Comment se référer au fichier de propriétés
Première botte à ressort (DI)
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Plans pour prendre en charge JDK 11 pour Eclipse et Spring Boot
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
[Java] Comment omettre l'injection de constructeur de ressort avec Lombok
Comment créer un projet Spring Boot dans IntelliJ
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment démarrer par environnement avec Spring Boot de Maven
Définir le paramètre contextuel dans Spring Boot
DI: Qu'est-ce que l'injection de dépendance?
Comment définir nginx de Docker
Introduction à Spring Boot ② ~ AOP ~
Comment définir des constantes Java
Définir des cookies avec Spring Boot
[Java] Fonctionnement de Spring DI
Introduction à Spring Boot, partie 1
Spring Boot pour l'apprentissage des annotations
Étapes requises pour émettre des événements asynchrones Spring Boot
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Comment modifier la valeur de paramètre de application.properties au moment du démarrage dans Spring Boot
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Comment utiliser Lombok au printemps
Comment faire un test unitaire de Spring AOP
Spring Boot pour la première fois
Comment spécifier la validation pour time_field
Comment installer JMeter pour Mac
Remarques sur l'utilisation de Spring Data JDBC
[Spring Boot] Que faire si une exception HttpMediaTypeNotAcceptableException se produit sur un point de terminaison pour lequel produit est défini
[Comment installer Spring Data Jpa]
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
Comment définir et utiliser un profil avec une configuration basée sur des annotations dans le framework Spring
Annotations fréquentes pour les tests Spring Boot
Utiliser DBUnit pour le test Spring Boot
Comment faire coexister CsrfRequestDataValueProcessor et RequestDataValueProcessor original sur Spring Boot
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
Comment définir Lombok dans Eclipse
Comment afficher les caractères saisis dans Spring Boot sur le navigateur et les liens de référence [Introduction à Spring Boot / Pour les débutants]
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
Spring.messages.fallback-to-system-locale: false est requis pour le message par défaut.properties pour la prise en charge i18n de Spring Boot