Section 3.4.4.5 du printemps docs, il explique assez bien:
(veuillez noter que le "userPreferences' haricot définition telle qu'elle est incomplète):
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>
À partir de la configuration ci-dessus, il est évident que le singleton bean "userManager" est injecté avec une référence à la Session HTTP étendue de haricot "userPreferences'. Le point important ici est que le 'userManager' haricot est un singleton... il va être instanciée qu'une seule fois par conteneur, et de ses dépendances (dans ce cas seulement, le userPreferences' bean) va également être injecté uniquement (une fois!).
Cela signifie que le "userManager" sera (théoriquement) ne jamais faire fonctionner sur exactement le même 'userPreferences' objet, c'est celui pour lequel il a été initialement injecté avec.
Ce n'est pas ce que vous voulez quand vous injecter une Session HTTP étendue de haricots comme une dépendance dans un collaborateur de l'objet (généralement). Plutôt, ce que nous voulons est un seul "userManager" objet par conteneur, et puis, pour la durée de vie d'une Session HTTP, nous voulons voir et d'utiliser un "userPreferences' objet qui est propre à ladite Session HTTP.
Mais plutôt de ce que vous avez besoin, alors, consiste à injecter une sorte d'objet qui expose exactement la même interface publique comme la UserPreferences classe (idéalement un objet qui est un UserPreferences exemple) et qui est assez intelligent pour être en mesure d'aller chercher le réel UserPreferences objet à partir de n'importe quel sous-jacente de portée mécanisme que nous avons choisi (HTTP request, Session, etc.). On peut alors injecter en toute sécurité cet objet proxy dans le "userManager' bean, qui va être au courant que le UserPreferences de référence qu'il est maintenant sur un proxy.
Dans notre cas, lorsqu'un UserManager instance appelle une méthode sur la dépendance à injection UserPreferences objet, il va vraiment être l'invocation d'une méthode sur le proxy... le proxy ensuite aller chercher le réel UserPreferences objet (dans ce cas) la Session HTTP, et de déléguer l'invocation de la méthode sur l'extrait réel UserPreferences objet.
C'est pourquoi vous avez besoin de ce qui suit, exacte et complète, la configuration lors de l'injection de la demande-, à la session, et globalSession étendue de haricots en collaboration objets:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="userManager" class="com.foo.UserManager">
<property name="userPreferences" ref="userPreferences"/>
</bean>