2008-10-28 4 views
2

Je veux autowire un bean partiellement - c'est-à-dire, je veux que certains args soient autowired mais l'autre soit explicitement placé. Par exemple:Est-il possible d'autowire partiellement un haricot de printemps?

MyClient publique (Service de, booléen b)

Dans le cas de ce constructeur, je voudrais préciser dans mon xml la valeur b, mais ont svc autowired. Est-ce possible?

Merci, Lowell

Répondre

4

Je ne pense pas qu'il est possible avec les constructeurs, mais avec setters explicites, il est certainement. Juste annoter ceux que vous voulez autowired avec @Autowired et définissez les autres dans votre config-file

Quelque chose comme:

public MyClient() {} 

@Autowired 
public setService (Service svc) {...} 

public setBoolean (boolean b) {...} 

puis dans votre config

<context:annotation-config /> 

<bean id="service">...</bean> 

<bean id="yourbean" class="MyClient"> 
    <property name="b" value="true"/> 
</bean> 
+0

NR, votre exemple est logique. Ce serait génial s'il y avait un moyen de tout faire à travers le constructeur, cependant, pour rendre l'objet immuable. – lowellk

+1

peut-être que vous pouvez essayer avec une solution "split"? Autowire le service avec un setter, et avoir un constructeur avec le booléen? –

+0

Ce serait mieux, mais j'espère que cela peut être fait avec un constructeur. Doigts croisés :-) – lowellk

3

I figured it out seul, hourra!

La façon dont je l'ai fait était de mettre quelque chose comme ce qui suit dans mon xml:

<bean class="MyClient" autowire="constructor"> 
    <constructor-arg index="1">...</constructor-arg> 
<bean> 
Questions connexes