2010-07-13 6 views
1

Je suis nouveau au printemps et à essayer de comprendre la fonctionnalité de la balise idrefBeanInstantiationException: Impossible de convertir le type de java.lang.String type requis --- étiquette idref

Mon fichier de configuration est collé ici:

<bean id="AudioSystembean" class="com.springexample.AudioSystem"> 
    <property name="price" value="200"/> 
</bean> 

<bean id="Vehicle1" class="com.SpringExample.Vehicle1"> 
    <property name="vehicleType" value="CAR" /> 
    <property name="audioSystem" > 
    <idref bean = "AudioSystembean" /> 
    </property> 
</bean> 

Quand je suis l'exécution du code, je reçois l'erreur: "BeanInstantiationException:Cannot convert type from java.lang.String to required type :com.SpringExampl.AudioSystem" [Je ne me souviens pas l'exception exacte - je le code à la maison]

Si j'utilise ref au lieu de idref cela fonctionne très bien.

J'ai essayé google à comprendre au sujet idref mais n'a pas pu obtenir beaucoup d'informations ..

Qu'est-ce que je fais mal ici?

Répondre

1

Dans un contexte de printemps, <idref> is used to pass the name of the referenced bean, plutôt que le haricot lui-même (ce que fait <ref>). Donc, dans votre exemple:

<property name="audioSystem" > 
    <idref bean = "AudioSystembean" /> 
</property> 

La propriété système audioSystem sera injecté avec le nom du AudioSystembean, à savoir la chaîne « AudioSystembean ».

Ce n'est pas ce dont vous avez besoin ici, cependant, vous avez besoin de l'élément <ref>, qui transmet une référence au bean lui-même.

+0

Merci Skaffman pour votre réponse et votre temps. Donc, vous dites qu'ideref passe ici seulement la chaîne mais pas le bean requis par la propriété "audioSystem". Le lien que vous avez donné est utile car j'ai peu de compréhension de idref..mais pas complètement :(Est-il possible d'injecter la propriété "audioSystem" avec le bean de type "AudioSystem" en utilisant la balise idref – javanoob

+0

@javanerd: Comme je l'ai dit, '' n'est pas utilisé pour passer des références, vous devez utiliser '' pour cela. – skaffman

+0

merci pour la réponse, je viens de lire la référence et j'ai compris qu'elle est utilisée pour passer seulement l'identifiant du bean (string) pas la référence de la fève Mais j'ai un doubt..Why voudrions-nous récupérer l'identifiant du grain Toute utilisation en temps réel de ce Merci pour le temps ur skaffman – javanoob

Questions connexes