2010-10-11 9 views
2

Je dois appeler les méthodes publiques du rubberStampService à l'intérieur de la classe RubberStampServiceImpl.Un bean Spring peut-il être une propriété de lui-même dans sa déclaration dans applicationContext.xml?

Pour faire référence à l'rubberStampService à l'intérieur de lui-même, puis-je faire une déclaration de haricot autoréférentiel comme ceci:

<beans:bean id="rubberStampService" class="com.rubberly.RubberStampServiceImpl"> 
    <beans:property name="rubberStampService" ref="rubberStampService" /> 
</beans:bean> 
+0

quel est le but? Travailler avec des aspects autour du haricot? Injecter un prototype (nouvelle instance) bean? Ou simplement appeler ses propres méthodes? – Bozho

+0

Vous pouvez avoir besoin de cela pour optimiser l'enchaînement par proxy comme @Async – Hurda

Répondre

1

sons comme un infiniment récursive, sur une erreur de mémoire en attente de se produire. Pourquoi ne pas simplement demander au service d'appeler sa propre méthode et de s'en passer? Vous n'avez pas besoin d'une nouvelle référence, juste "ceci".

public interface FooService() 
{ 
    void foo(); 
    void bar(); 
} 

public class FooServiceImpl implements FooService 
{ 
    public void foo() { System.out.println("calling foo"); } 
    public void bar() 
    { 
     this.foo(); // just call your own method. 
    } 
} 
+0

Vous n'avez pas besoin d'appeler récursivement la même méthode, vous pouvez toujours appeler une autre méthode ... – Hurda

+0

Pourquoi la rejeter quand vous ne comprenez pas la réponse? – duffymo

+0

Parce que vous avez des hypothèses fausses - parfois, ce n'est pas la bonne réponse – Hurda

5

Impossible de voir aucun problème avec cette approche. Le ressort peut gérer les dépendances circulaires (si elles peuvent être résolues, c'est-à-dire si vous n'utilisez pas l'injection du constructeur), y compris le cas du bean auto-référencé. La seule différence est que dans le cas des dépendances circulaires, les haricots peuvent ne pas être entièrement initialisés lorsqu'ils sont injectés.

Il peut être utile lorsque le bean peut être configuré pour utiliser différents collaborateurs, mais dans certains cas spécifiques, il doit utiliser lui-même.

Voir aussi:

Questions connexes