Préface
Javaconfig s'est avéré être un sous-projet du printemps. Il fournit des informations de définition de bean via des classes Java. Dans la version Spring4, Javaconfig est devenu officiellement la fonction centrale de Spring4.
Cet article présentera en détail le contenu pertinent sur la configuration basée sur les classes Java au printemps. Je ne dirai pas beaucoup en dessous. Jetons un coup d'œil à l'introduction détaillée ensemble.
1 haricot de définition
Le POJO ordinaire peut fournir des informations de définition de bean pour les conteneurs de ressort tant que l'annotation @configuration est marquée.
@Configurationpublic class SystemConfig {/ ** * Définissez le bean et instancient * * @return * / @bean public UserDao UserDao () {return new UserDao (); } @Bean public DeptDao DeptDao () {return new DeptDao (); } / ** * Définissez le service d'utilisateur et injectez le UserDao et DeptDao * précédemment défini * * @return * / @bean publicservice userService () {userService Service = new UserService (); Service.SetUserDao (UserDao ()); Service.SetDeptDao (DeptDao ()); Service de retour; }}La méthode de cette classe est annotée par l'annotation @Bean, c'est-à-dire pour définir le haricot. Le type de haricot est déterminé par le type de la valeur de retour de la méthode. Le nom par défaut est le nom de la méthode et le nom de la méthode. Vous pouvez également spécifier le nom de bean en entrant le paramètre, tel que @bean (name = ”xxx”). Le corps de la méthode marqué par @Bean fournit la logique pour instancier le haricot.
La configuration ci-dessus est équivalente au XML suivant:
<bean id = "userdao" /> <bean id = "deptdao" /> <bean id = "userService" p: userdao-ref = "userdao" p: deptdao-ref = "deptdao" />
Par rapport à la méthode de configuration basée sur les classes Java, qui est basée sur la méthode de configuration XML ou basée sur l'annotation -
Étant donné que la classe d'annotation @configuration lui-même a @component, ces classes peuvent être injectées dans d'autres haricots comme les haricots ordinaires.
@Configurationpublic class applicationconfig {@autowired private systemconfig systemconfig; @Bean Public AuthorityService AuthorityService () {AuthorityService Service = New AuthorityService (); Service.SetUserDao (SystemConfig.UserDao ()); Service.SetDeptDao (SystemConfig.deptDao ()); Service de retour; }}Spring utilise l'amélioration AOP pour toutes les méthodes marquées @Bean dans la classe de configuration, introduisant la logique de gestion du cycle de vie du Bean. Par exemple, SystemConfig.Userdao () ci-dessus, il renvoie un singleton correspondant au bean.
Dans @Bean, nous pouvons également contrôler la portée du haricot en annotant l'annotation @Scope:
@Scope ("Prototype") @ beanpublic DeptDao DeptDao () {return new DeptDao ();}De cette façon, chaque appel à la méthode DeptDao () renverra une nouvelle instance:
AssertNotsame (AuthorityService.getDeptDao (). HashCode (), AuthorityService.getDeptDao (). HashCode ());
Remarque: Utilisez des classes basées sur Java pour la configuration, les bibliothèques Spring AOP et CGLIB doivent être incluses dans le chemin de classe.
2 Démarrez le conteneur à ressort
2.1 Utilisez uniquement la classe @configuration
Vous pouvez utiliser le constructeur de la classe AnnotationConfigApplicationContext pour passer dans la classe Java marquée @configuration pour démarrer le conteneur à ressort.
ApplicationContext context = new AnnotationConfigApplicationContext (SystemConfig.class); UserService UserService = (UserService) context.getBean ("userService"); AssertNotNull (UserService);S'il existe plusieurs classes de configuration @configuration, vous pouvez les enregistrer dans l'annotationConfigApplicationContext, puis appliquer ces classes de configuration en rafraîchissant le conteneur:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (); // Registre plusieurs classes de configuration context.Register (SystemConfig.class); context.Register (applicationConfig.class); // Rafraîchir le conteneur (appliquer ces classes de configuration) context.refresh (); application Config = Context.getBean (applicationConfig.
Vous pouvez également assembler plusieurs classes de configuration en une seule classe de configuration via @Import, puis enregistrer simplement la classe de configuration assemblée pour démarrer le conteneur:
@ Configuration @ import (SystemConfig.class) public classe applicationconfig2 {@autowired private systemConfig systemConfig; @Bean Public AuthorityService AuthorityService () {AuthorityService Service = New AuthorityService (); Service.SetUserDao (SystemConfig.UserDao ()); Service.SetDeptDao (SystemConfig.deptDao ()); Service de retour; }}Tests unitaires:
AnnotationConfigApplicationContext context = new AnnotationConFigApplicationContex config.AuthorityService (); AssertNotNull (AuthorityService.getDeptDao ()); ASSERTNOTSAME (AuthorityService.getDeptDao (). HashCode (), AuthorityService .getDeptDao (). HashCode ());
2.2 Utilisation de fichiers XML pour se référer à la configuration de la classe @configuration
La classe de configuration marquée @configuration est également un bean, donc il peut également être analysé par Spring <Context: Component-Scan>. Par conséquent, si vous souhaitez assembler la classe de configuration dans le fichier de configuration XML et démarrer le ressort via le fichier de configuration XML, il vous suffit de scanner la classe de configuration correspondante via <context: composant-scan> dans XML.
<Context: Component-Scan Base-Package = "Net.DENIRO.Spring4.Conf" Ressource-Pattern = "ApplicationConfig2.class" />
2.3 Configuration des fichiers XML de référence dans la classe @configuration
Dans la classe de configuration @configuration, vous pouvez introduire directement des fichiers de configuration XML via @importResource, afin que vous puissiez vous référer directement aux beans définis dans le fichier de configuration XML via @autowired.
Fichier de configuration:
<bean id = "groupdao" /> <bean id = "roledao" />
Classe @configuration:
@ImportResource ("ClassPath: Beans5-11.xml") @ ConfigurationPublic Class ServiceConfig {@Bean @Autowired Relateurs de Relationshipservice (GroupDao GroupDao, Roledao Roledao) {RelativeService Service = New Rela-RelativeService (); Service.SetGroupDao (GroupDao); Service.SetRoledao (Roledao); Service de retour; }}Tests unitaires:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContex ("Roledao")); AssertNotNull (Service.GetRoledao ());Tant que ces informations de définition de différentes formes de haricots peuvent être chargées dans des conteneurs à ressort, le ressort peut compléter intelligemment l'assemblage entre les haricots.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.