De la DI avec Spring 2.5 sans XML (Java SE)

Spring 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.

[Suite:]

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 ;)

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: