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.

...

Remarque

Usuellement un bean de scope request peut faire référence, via ses propriétés, à un bean de scope session ou singleton. De même, un bean de scope session peut faire référence à un bean de scope singleton. Une bonne architecture nous ammène d'ailleurs à utiliser dans ce sens l'injection de beans. Par défaut la réciproque provoque une exception ... mais il est cependant possible de réaliser cette réciproque par le biais de l'aop, et cela très simplement.

Concrètement si nous voulons ici injecter le bean administratorsController qui est de scope session dans un bean de scope singleton, on utilisera la balise aop:scoped-proxy comme ceci dans la déclaration du bean administratorsController :

Bloc de code
<bean id="administratorsController"
  class="[...].formation.web.controllers.AdministratorsController"
  parent="abstractContextAwareController"
  scope="session">
 <aop:scoped-proxy/>
</bean>

Pour ce faire, on aura pris soin de déclarer comme il se doit l'espace de noms aop, avec dans la balise racine du fichier de configurations de beans spring ceci :

Bloc de code
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	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-2.0.xsd
                            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

Attention vous devez bien utiliser spring-beans-2.0.xsd et spring-aop-2.0.xsd (-2.0.xsd pour les deux xsd)

Avertissement

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.

En mode batch par exemple, on utilisera :

Bloc de code

DomainService domainService = (DomainService) BeanUtils.getBean("domainService");
Remarque

La classe BeanUtils de esup-commons utilise toujours la même beanFactory (statique), et il ne faut pas créer une nouvelle beanFactory « à la main » (par exemple à partir du fichier de configuration /properties/applicationContext.xml.

Remarque