shared prototype : un mapping dynamique des références
Bonjour à tous,
Il y a un concept que j'aimerais mettre en œuvre avec Spring ; je ne pense pas que cela soit prévu directement.
J'aurais besoin qu'un bean en scope prototype soit commun à plusieurs autres beans de scope prototype ; ces beans ont donc un état, mais j'aimerais que, d'une certaine façon, il soit "partagé".
Exemple :
le bean myHelper doit manipuler l'état des beans my*User. ce bean DOIT être géré par Spring parce qu'il a de nombreuses dépendances.
Code:
1 2 3 4 5 6 7 8 9
| <bean id="mngdBean2" class="..." scope="prototype" />
<bean id="myHelper" class="...">
<property name="prop1" ref="mngdBean1" />
...
</bean>
<bean id="myFirstUser" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2" />
<property name="myHelper" ref="myHelper" />
</bean> |
Dans cette configuration, le bean myFirstUser doit transmettre au bean myHelper sa propriété statedProp, dans les paramètres des fonctions, pour que ce dernier puisse modifier l'état (rappel : le user est un prototype). Mais cela surcharge grandement les appels, du coup.
Moi, ce que j'aimerais, c'est pouvoir écrire qq chose comme ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <bean id="mngdBean2" class="..." scope="prototype" />
<bean id="myHelper" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2#?" />
<property name="prop1" ref="mngdBean1" />
...
</bean>
<bean id="myFirstUser" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2#firstUser" />
<property name="myHelper" ref="myHelper" />
</bean>
<bean id="mySecondUser" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2#firstUser" />
<property name="myHelper" ref="myHelper" />
</bean>
<bean id="myThirdUser" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2#thirdUser" />
<property name="myHelper" ref="myHelper" />
</bean>
<bean id="myFourthUser" class="..." scope="prototype">
<property name="statedProp" ref="mngdBean2" />
<property name="myHelper" ref="myHelper" />
</bean>
<bean id="myFithUser" class="..." scope="prototype">
<property name="myHelper" ref="myHelper" />
</bean> |
... afin que les propriétés qui sont éventuellement pointées dans le Helper et qui sont des prototypes puissent être héritées du User qui se le voit injecter.
Dans ma proposition de syntaxe, la statedProp de myHelper se voit injecter :
* la même référence (pointer) que MyFirstUser et MySecondUser lorsqu'il est injecté dans ces beans (je rappelle que les User sont des prototypes) ;
* la même référence (pointer) que MyThirdUse lorsqu'il est injecté dans ce bean, mais qui est différente de celle de MyFirstUser et MySecondUser ;
* une référence (pointer) différente de celle de myFourthUser car celui-ci ne définit pas d'étiquette pour sa propre propriété ;
* une référence (pointer) autonome par rapport à myFithUser car celui-ci ne définit pas de propriété statedProp...
NB : j'utilise des étiquettes pour permettre le cas de MySecondUser.
Bien sûr, de nombreux cas ne sont pas évidents (cascade, nécessité de nommer les propriétés pareil ou en se basant simplement sur ref="..."), mais l'idée générale est là.
=> Est-ce que cette idée vous parait utile ? Est-ce qu'il y a un moyen simple qui permet d'atteindre ce but (un prototype partagé entre plusieurs beans) ?
Merci d'avance pour vos retours.