jeudi 6 janvier 2011

Accès au contexte d’application Spring


Tout Bean déclaré dans un contexte d’application Spring peut se voir injecter des ressources liées au conteneur s’il implémente certaines interfaces.

BeanNameAware                 : Le nom du Bean tel qu’il est configuré dans le contexte.
BeanFactoryAware              : La BeanFactory du conteneur
ApplicationContextAware    : Le contexte d’application lui-même

 
cela s’avère parfois nécessaire pour une intégration poussée avec le conteneur ou pour profiter de services qu’il fournit. Spring propose un ensemble d’interfaces qui peuvent être implémentées par tout Bean et dont l’implémentation provoque le cas échéant l’injection automatique d’une ressource du conteneur.

Exemple : Accéder au contexte Spring depuis un composant non géré par Spring.

 Pour donner accès au contexte Spring aux composants non gérés par Spring, il suffit d'implémenter un bean géré par Spring, implémentant ApplicationContextAware, qui va exposer des méthodes d'accès au contexte Spring



Il est ensuite nécessaire de configurer cette classe dans le contexte Spring : Le principe est que lors de l'instanciation de la classe ApplicationContextHolder par le conteneur Spring, celui-ci va détecter qu'elle implémente l'interface ApplicationContextAware, et donc lui injecter le contexte

<bean  id="applicationContextHolder" class="com.spring.context.ApplicationContextHolder" />

cas d'utilisation :

        ApplicationContext context = ApplicationContextHolder.getContext();
        IUserService userService   = (IUserService)context.getBean("userService");

  ou directement :

        IUserService userService   = (IUserService)ApplicationContextHolder.getBean("userService");

    






Aucun commentaire:

Enregistrer un commentaire