[Java] Spring DI ③
Que faites-vous avec DI?
- ** Trouver une classe gérée DI (analyse des composants) **
- ** Création et injection d'instance **
Analyse des composants
- Au démarrage de Spring, le processus de recherche de la classe avec l'annotation cible gérée par DI s'exécute et l'enregistre dans le conteneur DI.
- La classe gérée sur le conteneur DI s'appelle ** Bean **
[Annotation à numériser]
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
- @RestController
- @ControllAdvice
- @ManagedBean
- @Named
Création et injection d'instances
- ** Instantanez et injectez des beans dans un conteneur DI **
- Collecte des classes cibles DI (Beans) et DI en crée des instances (nouveau)
- Injectez l'instance générée dans le champ avec l'annotation ** @ Autowired ** suivante
- Variables de champ
- Arguments du constructeur
- argument du setter
- Vous pouvez passer une instance comme argument en préfixant le constructeur avec @Autowired.
- L'image est "Créez une instance de chaque classe dans le conteneur DI, récupérez l'instance avec getter, et appelez le getter du conteneur DI dans le champ avec @Autowired".
//image
public class DependencyInjection{
//Créer une instance de chaque classe
private SampleComponent component = new SampleComponent();
private SampleService service = new SampleService();
//Récupérateur d'instance SampleComponent
public static SampleComponent getSampleComponent(){
return component;
}
//Récupérateur d'instance SampleService
public static SampleService getSampleService(){
return service;
}
}
- ** Vous pouvez éviter de créer une classe Factory simplement en ajoutant une annotation telle que @Component! ** **
Alors, comment le mettez-vous en œuvre?
- Base d'annotation
- JavaConfig
- xml
- JavaConfig + annotation
- xml + annotation
Base d'annotation
- Spring enregistre automatiquement les classes avec @Component, @Controller, etc. dans le conteneur DI
JavaConfig
- Préparez une classe avec l'annotation @Configuration
- Préparez une méthode getter avec l'annotation @Bean dans la classe
- La valeur de retour de getter est enregistrée dans le conteneur DI en tant que bean.
- Dans le conteneur DI, préparez la classe JavaConfig et les instances Bean, et récupérez chaque instance avec getter à l'emplacement @Autowired.
- Contrairement à la base d'annotation, la valeur de retour du getter avec l'annotation @Bean est gérée par le conteneur DI.
- En d'autres termes, il est nécessaire de préparer une méthode pour l'instance gérée par le conteneur DI.
- Les réglages détaillés et la commutation sont possibles
Annotation JavaConfig +
- Annotez la classe que vous souhaitez gérer avec DI, comme @Controller
- Défini avec JavaConfig uniquement pour l'instance pour laquelle vous souhaitez définir des paramètres détaillés
- Si vous souhaitez créer une petite application basée sur des annotations et augmenter l'échelle ou les paramètres de commutation, implémentez-la avec les annotations JavaConfig +.
base xml
- Faites la même chose en xml que vous définissez dans JavaConfig