juin
2008
En continuité du post précédent, je vais proposer ici une version modifiée de l’Injector qui ne nécéssite pas de fichier XML pour faire de la DI (Dependancy Injection) dans un environnment SE.
Il faut passer par les annotations bien sûr, et ceci marche avec spring 2.5 (je ne sais pas si ça l’est avec Spring 2) (Suite à la remarque d’evenisse, ceci ne fonctionne qu’avec Spring 2.5.2).
Voici maintenant le code de la classe Injector:
package spring.di.in.se.can.be.easy;
public class Injector {
private static ApplicationContext applicationContext;
public static void init(String... basePackages) {
GenericApplicationContext context = new GenericApplicationContext();
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(
context);
scanner.scan(basePackages);
context.refresh();
context.registerShutdownHook();
applicationContext = context;
}
public static void configure(Object object) {
applicationContext.getAutowireCapableBeanFactory().autowireBean(object);
}
}
En supposant disposer des même classes du billet précédent (TestDao, TestService et TestConsumer), il est possible de récupérer une instance configurée de TestConsumer comme-ceci:
public class Test {
public static void main(String[] args) {
Injector.init("model");
TestConsumer cl = new TestConsumer();
System.out.println(cl.getValue());
}
}
(Il faut toujours appeler Injector.configure(this) dans le constructeur de TestConsumer).
La méthode Injector.init prend maintenant une liste de noms de packages à scanner pour les composants Spring, ici seulement le package model (il n’est pas nécesssaire d’annoter TestConsumer comme composant Spring, il suffit juste de déclarer ses dépendances), et hop, ça marche
Merci de l’avoir précisé ! Je vais mettre à jour le billet en conséquence !
Ce code ne fonctionne qu’avec spring 2.5.2 car la méthode autowireBean(object) n’existe pas avant cette version