2017-09-21 5 views
0

Je veux passer le id de la config XML au constructeur du bean. Je ne veux pas mettre en œuvre BeanNameAware pour ce faire. Ma façon préférée de le faire serait une expression de printemps EL comme ceci:Comment injecter l'identifiant du bean avec Spring EL?

<bean id="ws1" class="com.example.MyClass"> 
    <constructor-arg name="id" value="#{#this.id}"/> 
    <!-- ... --> 
</bean> 

Cependant, #this fait référence à BeanExpressionContext dans ce cas, ce doesen't contient le id.

Existe-t-il un moyen d'accéder au id (ws1 dans mon exemple) avec une expression Spring EL?

Répondre

2

Si vous avez besoin de savoir l'ID de haricot dans la cible MyClass exemple, vous devriez envisager de mettre en œuvre BeanNameAware:

* Interface to be implemented by beans that want to be aware of their 
* bean name in a bean factory. Note that it is not usually recommended 
* that an object depends on its bean name, as this represents a potentially 
* brittle dependence on external configuration, as well as a possibly 
* unnecessary dependence on a Spring API. 

Mais à droite, vous ne pouvez pas y avoir accès à partir Spel. OTOH Je ne vois pas de gros problème dans votre échantillon pour copier/coller ws1 à cette id valeur d'argument constructeur.

+0

Puisque je ne veux pas implémenter 'BeanNameAware', je vais copier le nom. Ce n'est pas un gros problème, mais j'ai cherché une solution plus élégante. – deamon

+0

Le 'id' est un attribut si spécifique que vous ne pouvez rien faire avec cela, même utiliser Propriétés Placeholder. Maintenant, considérez que vous passez à la configuration Java ... –