Le framework Spring http://spring.io est utilisé très largement pour l’injection de dépendances dans Lutece.
Cette pratique de développement, aussi appelée inversion de contrôle (IoC), a pour but de créer dynamiquement (injecter) les dépendances entre les différentes classes en s'appuyant sur une description (le fichier de context pour Spring). Ainsi les dépendances entre composants logiciels ne sont plus exprimées dans le code de manière statique mais déterminées dynamiquement à l'exécution. Ce découplage permet de substituer une implémentation donnée par une autre par simple modification du fichier de configuration.
Ce choix technique confère à Lutece des possibilités d'adaptabilité très grandes. Tous les services injectés par Spring peuvent être substités par d'autres implémentations sans modification du code de Lutece.
De plus, en terme de modularité, chaque plugin dispose d’un fichier de context propre pour déclarer ses beans. Ces fichiers sont situés dans le répertoire WEB-INF/conf/plugins. Ils contiennent la déclaration des beans fournis par le plugin et à charger dans le contexte global.
Le core dispose de son propre fichier de context : WEB-INF/conf/core_context.xml.
NB : Les noms des beans doivent être préfixés par le nom du plugin suivi d’un point pour éviter les conflits de nommage.
A titre d'exemple, tous les DAO (Data Access Object) sont par défaut « injectés » via Spring comme le montre le fichier context suivant :
<?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="appstore.categoryDAO" class="fr.paris.lutece.plugins.appstore.business.CategoryDAO" />
<bean id="appstore.applicationDAO" class="fr.paris.lutece.plugins.appstore.business.ApplicationDAO" />
<bean id="appstore.componentDAO" class="fr.paris.lutece.plugins.appstore.business.ComponentDAO" />
<bean id="appstore.iconDAO" class="fr.paris.lutece.plugins.appstore.business.IconDAO" />
</beans>
L'accès à un bean se fait de la manière suivante en Java :
private static final String BEAN_NAME = "myplugin.mybean";
MyInterface bean = SpringContextService.getBean( BEAN_NAME );
NB : Il est possible d'utiliser l’annotation @Inject si l'on se trouve dans une classe instanciée par Spring.
Une pratique souvent utilisée dans Lutece, est de charger une liste de beans qui implémentent la même interface.
List<MyInterface> beans = SpringContextService.getBeansOfType( MyInterface.class );
C'est par ce mécanisme par exemple que le moteur de Workflow de Lutece est capable de charger dynamiquement toutes les tâches fournies par tous les différents plugins installés ; Celles-ci implémentant toute l'interface Task.
Pour plus d'informations sur le framework Spring, reportez-vous à la documentation située à l'adresse suivante : http://spring.io/docs
Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.
Vous devriez rafraîchir la page.