Projets
Pages enfant
  • 1.7 Les beans Spring

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Sommaire :

Sommaire
maxLevel3

...

Les fichiers de configuration

Spring permet de créer des objets (appelés alors beans) en les déclarant dans un fichier de configuration XML.

...

Il est possible, suivant les besoins de votre application, de supprimer ou d'ajouter des fichiers de configuration spécialisés.

L'injection de données

Une des caractéristiques de base de Spring est de permettre l'injection de données.

...

Voyons quelques exemples.

Injection d'une chaîne de caractères

Bloc de code
<property name="recipientEmail" value="webmaster@domain.edu"/>

Dans ce cas, la méthode setRecipentEmail() sera appelée avec la valeur webmaster@domain.edu.

Injection d'un autre bean

Bloc de code
<property name="authenticationService" ref="authenticationService"/>

On voit ici un autre aspect important de Spring qui est l'utilisation quasi systématique des interfaces. La classe CachingEmailExceptionServiceFactoryImpl (qui correspond au bean exceptionServiceFactory et contient la définition de cette propriété authenticationService) a un attribut authenticationService de type AuthenticationService. AuthenticationService est une interface. Le bean authenticationService doit être d'une classe qui implémente cette interface. Ceci permet d'avoir plusieurs implémentations possibles de cette interface et de choisir, simplement en modifiant un fichier de configuration, laquelle on utilise. Cette approche est particulièrement intéressante. Elle permet, par exemple, de très facilement tester une couche de l'application en branchant des implémentations de tests des autres couches avec lesquelles le bean doit interagir.

Injection d'une map

Bloc de code
<property name="exceptionViews" >
  <map>
    <entry key="java.lang.Exception" value="go_exception" />
  </map>
</property>

Injection d'une liste

Bloc de code
<property name="servers">
  <list>
    <ref bean="smtpServer1" />
    <ref bean="smtpServer2" />
  </list>
</property>

Utilisation de paramètres

Afin de centraliser la configuration une bonne pratique consiste à utiliser un fichier de configuration centralisant les paramètres de l'application. Ceci évite notamment de devoir modifier n fichiers différents.

...

Remarque

Ce mécanisme est rendu possible par la définition d'un bean utilisant la classe PropertyPlaceholderConfigurer de Spring dans le fichier properties/applicationContext.xml

Bloc de code
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
      <value>classpath:/properties/defaults.properties</value>
      <value>classpath:/properties/config.properties</value>
    </list>
  </property>
</bean>

L'héritage de configuration

Spring n'oblige pas à saisir, dans toutes les définitions de beans, les mêmes propriétés. Pour cela, il est possible d'utiliser le mot-clé parent.

...

Remarque

L'attribut scope (voir ci-après) n'est pas héritable, il est donc inutile de le préciser pour un bean abstrait.

Vérification des beans

Les beans manipulés par Spring n'ont pas, par défaut, de dépendances particulières avec Spring.

...

Bloc de code
public void afterPropertiesSet() {
  super.afterPropertiesSet();
  if (!StringUtils.hasText(exceptionView)) {
    exceptionView = DEFAULT\__SERVLET_\_EXCEPTION_VIEW;
    logger.info(getClass() + ": no exceptionView set, using default \[" + exceptionView + "\]");
  }
}

Portée des beans

Spring offre une notion de portée (scope).

...

Bloc de code
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

Récupération des beans

Lorsque l'on veut récupérer un bean à partir de son nom, il faut obligatoirement utiliser la classe BeanUtils fournie par esup-commons.

...