Injection de dépendance. Plutôt que de créer une instance de la classe dépendante dans la classe dépendante Avoir la classe dépendante comme variable de champ de la classe dépendante. Par conséquent, passez la classe dépendante de l'extérieur dans le constructeur, etc. Habituez-vous plutôt que de l'apprendre.
Il existe de nombreuses annotations liées à l'ID, mais il est facile à comprendre si vous pensez qu'elles sont essentiellement classées dans l'une des trois étapes suivantes. Quelles sont les trois étapes de l'ID?
--Définir la classe à enregistrer dans le conteneur DI
Est.
--Définition Java (= JavaConfig) --Définition par annotation
Appelé JavaConfig. --Créez une classe avec l'annotation @Configuration --Créez une méthode avec l'annotation @Bean
@Configuration
public class AppConfiguration {
//Inscrire la classe ServiceImpl dans le conteneur DI
@Bean
public Service service() {
return new ServiceImpl();
}
//Inscrire la classe RepositoryImpl dans le conteneur DI
@Bean
public Repository repository() {
return new RepositoryImpl();
}
//La même chose s'applique ci-dessous
.
.
.
}
Est-il normal de définir une interface et de mettre la classe d'implémentation dans @Configuration?
--Ajoutez l'annotation @Component à la classe enregistrée. --L'annotation @Component est incluse dans les définitions de diverses annotations. (-> @Controller, @Service, @Repository, @Configuration, etc.)
//@Annotation des composants@Inclus dans l'annotation de service
@Service
public class ServiceImpl implements Service {
}
** En fait ** enregistrez l'instance dans le conteneur DI. En effectuant un ** scan de composant **, l'enregistrement de l'instance dans DI est réalisé.
-Ajoutez l'annotation @ComponentScan à la classe avec l'annotation @Configuration
@Configuration
@ComponentScan(basePackages = "jp.co.yahoo")
// @ComponentScan <-S'il est inférieur au répertoire courant
public class AppConfiguration {
}
Ajoutez l'annotation @Autowired. Il existe les trois méthodes suivantes.
Ajoutez @Autowired au constructeur.
--Le champ cible peut être finalisé (= interdire le remplacement des instances dépendantes lors de l'exécution) -Vous pouvez omettre la description de @Autowired
Il y a un mérite. Méthode recommandée.
private final Service service;
public Controller(Service service) {
this.service = service;
}
@Autowired
private Service service;
private Service service;
@Autowired
public void setService(Service service) {
this.service = service;
}
L'annotation @SpringBootApplication peut être ajoutée au démarrage de l'application. Avec cela, la plupart des annotations ci-dessus seront effectuées sans autorisation. Nous examinerons le processus ci-dessous.
référence
Many Spring Boot developers always have their main class annotated with @Configuration, @EnableAutoConfiguration and @ComponentScan. Since these annotations are so frequently used together (especially if you follow the best practices above), Spring Boot provides a convenient @SpringBootApplication alternative.
The @SpringBootApplication annotation is equivalent to using @Configuration, @EnableAutoConfiguration and @ComponentScan with their default attributes:
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
** SpringBoot a une classe JavaConfig prédéfinie. ** ** Si vous y réfléchissez, c'est naturel. Il ne peut pas être appelé un framework s'il est nécessaire de définir une classe cible DI à chaque fois qu'une bibliothèque externe est ajoutée et de répéter le travail d'enregistrement dans le conteneur DI.
La fonction pour enregistrer automatiquement l'instance définie dans cette classe dans le conteneur DI est appelée ** AutoConfiguration **.
** La configuration automatique peut être activée en créant une classe avec l'annotation @EnableAutoConfiguration. ** ** En général, ajoutez l'annotation @EnableAutoConfiguration à une classe qui a l'annotation @Configuration.
Il y a deux points dans la création d'une classe de lancement d'application.
-Ajouter l'annotation @SpringBootApplication --Exécutez la méthode run de la classe @SpringApplication
@SpringBootAnnotation contient les annotations suivantes.
Vous pouvez également spécifier les packages à analyser à l'aide de l'attribut scanBasePackages.
@SpringBootApplication(scanBasePackages = "com.example")
En ajoutant l'annotation @SpringBootApplication, la définition et l'enregistrement JavaConfig par défaut dans le conteneur DI peuvent être omis.
Lors de l'enregistrement par vous-même (lors de l'ajout de la différence par rapport à JavaConfig par défaut), si vous ne définissez que par annotation, vous pouvez vous inscrire au conteneur DI simplement en ajoutant l'annotation @Component, et vous pouvez injecter avec l'annotation @Autowired. ..
Supplément
――Si la différence est trop grande, vous devrez définir JavaConfig vous-même, mais pour le moment, il n'est défini que par des annotations.
(Eh bien, je pense que vous n'avez pas besoin d'en être très conscient car la classe d'exécution est placée au niveau supérieur.)