4 nov. 2021 12:00:31 Thomas Dumont avatar

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 œuvre le design pattern Inversion of Control, aussi désigné par le sigle IoC qui renvoie à l'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 documentation de Spring.

Mise en œuvre

La mise en œuvre de Spring dans Lutèce repose sur le service SpringContextService qui a pour objet de fournir les objets définis dans un context donné (au sens de Spring).

Lutèce prévoit un contexte commun pour le core et les plugins. Le fichier XML du contexte 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 .

Info Il est possible de surcharger les beans dans le répertoire /WEB-INF/conf/override.

Context Fichier Surcharge
Core /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" );

Le bean myplugin.pollDAO peut être déclaré dans le fichier XML avec une autre implémentation de IPollDAO sans remise en cause du code. Ceci permet alors au code Lutèce d'avoir une très grande souplesse d'évolution et de personnalisation.