Jun 1, 2014 10:08:25 PM lutece lutece avatar   1939    

Utilisation du framework Spring


Spring logo

Principes d'utilisation du framework Spring

Le framework Spring est utilisé pour ses fonctionnalités de "conteneur léger" réalisant l'instanciation de beans déclarés dans un fichier XML. Ce dispositif appelé également BeanFactory offre de nombreux avantages :

  • Le code ne connait que le nom du bean et son interface. Il est donc possible de modifier très facilement une implémentation par une autre sans modification du code appelant.
  • Les objets sont instanciés par Spring et s'exécutent dans un conteneur ce qui permet d'ajouter, de manière déclarative et sans modification de code, des comportements gérés par le conteneur (ex: support transactionnel, intercepteurs , ...)
  • Le mode d'instanciation des beans met en oeuvre le design pattern "Inversion of Control" , aussi désigné par le sigle (IoC) . Ceci confère à un objet la responsabilité de charger et vérifier ses dépendances. Ce mécanisme permet de faire notamment de l'injection de dépendances

Pour plus d'informations sur ces sujets, reportez-vous à la documention de Spring. http://www.springframework.org

Mise en oeuvre

La mise en oeuvre de Spring dans Lutece repose sur le service SpringContextService qui a pour objet de fournir les objets définis dans un context donné (au sens Spring du terme).

Lutece prévoit un contexte commun pour le core et les plugins. Le fichier XML du context décrivant les beans doit respecter les règles suivantes concernant son emplacement et son nom afin d'être automatiquement chargé par le service SpringContextService . Il est possible de surcharger les beans dans le répertoire /WEB-INF/conf/override

ContextFichierSurcharge
Noyau/WEB-INF/conf/core_context.xml/WEB-INF/conf/override/core_context.xml
Plugin/WEB-INF/conf/plugins/<plugin >_context.xml/WEB-INF/conf/override/plugins/<plugin >_context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="myplugin.pollDAO" class="fr.paris.lutece.plugins.myplugin.business.PollDAO" />
    <bean id="myplugin.pollQuestionDAO" class="fr.paris.lutece.plugins.myplugin.business.PollQuestionDAO" />
    <bean id="myplugin.pollChoiceDAO" class="fr.paris.lutece.plugins.myplugin.business.PollChoiceDAO" />

</beans>

L'instanciation des beans dans le code se fait à l'aide de la méthode getBean().

// Instanciation via Spring d'un object DAO déclaré dans le fichier myplugin_context.xml

private static IPollDAO _dao = (IPollDAO) SpringContextService.getBean( "myplugin.pollDAO");

L'implémentation du bean "pollDAO" déclaré dans le fichier XML peut être remplacée par une autre sans remise en cause du code. Ceci confère à Lutece une très grande souplesse d'évolution et de personnalisation.