--Cette fois --À propos du conteneur DI, l'une des fondations de Spring Framework ――Il existe de nombreux compléments basés sur mon interprétation, donc si vous avez des suggestions, n'hésitez pas à nous contacter.
--Permanent ou processus ʻUserRep
--PasswdEnc` pour hacher les mots de passe
――Lorsque vous dessinez un diagramme de classes, il ressemble à ce qui suit. prennent ʻUserRep
et PasswdEnc
, leurs implémentations respectives comme arguments.PasswdEnc passwdEnc = new PasswdEncImpl();
UserRep userRep = new UserRepImpl();
UserService userService = new UserServiceImpl(passwdEnc, userRep);
――Pour "préréglé" ...
--Définissez dans la classe (** fichier de définition Bean **) avec l'annotation @ Configuration
.
--Ajoutez un composant avec l'annotation @ Bean
et spécifiez l'implémentation que vous souhaitez appeler à chaque fois.
@Configuration
public class AppConfig{
@Bean
UserRep userRep(){
return new UserRepImpl();
}
@Bean
PasswdEnc passwdEnc(){
return new PasswdEncImpl();
}
@Bean
UserService userService(){
return new UserServiceImpl(userRep(), passwdEnc());
}
}
--Si vous définissez à l'avance comme ci-dessus, vous pouvez facilement initialiser le type d'interface ʻUserService` via le conteneur DI.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
//Générer un conteneur DI
UserService userService = context.getBean(UserService.class)
//Obtenez une implémentation prédéfinie via le conteneur DI
―― En d'autres termes, l'utilisation de conteneurs DI est grossièrement divisée en trois phases.
@ Component
directement à la classe d'implémentation pour enregistrer le bean, et lorsque vous voulez l'appeler depuis un autre composant, ajoutez l'annotation @ Autowired
.@Component //S'enregistrer en tant que bean
public class UserRepImpl implemente UserRep {
//réduction
}
@Component //S'enregistrer en tant que bean
public class PasswdEncImpl implemente PasswdEnc {
//réduction
}
@Component //En s'enregistrant comme un haricot...
public class UserServiceImpl implemente UserService {
@Autowired //Injecter d'autres haricots
public UserServiceImpl(UserRep userRep, PasswdEnc passwdEnc)
}
-- @ Autowired
** recherche dans le conteneur DI les beans ** qui correspondent au type de cible par défaut.
--Lors de l'exécution d'une analyse de composant, il est nécessaire de spécifier le package que vous souhaitez cibler pour l'analyse de composant dans le fichier de définition de Bean comme indiqué ci-dessous.
@Configuration
@ComponentScan("com.example.hoge")
public class AppConfig{
}
--La recherche est la même que lors de l'utilisation du fichier de définition Bean.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
//Générer un conteneur DI
UserService userService = context.getBean(UserService.class)
//Obtenez une implémentation prédéfinie via le conteneur DI
--NTT DATA Co., Ltd. (2016) "Présentation approfondie du développement d'applications Spring Java avec Spring Framework" Shosuisha
Recommended Posts