2010-01-15 13 views
3

Je suis assez nouveau à l'idée d'injecter des haricots, alors parlez lentement. :)La propriété Spring Injected Bean est null

J'ai une classe qui injecte un bean, mais lorsque la propriété est accessible, la propriété est null et j'obtiens une exception null-pointer.

De /project-TRUNK/war-module/src/main/webapp/WEB-INF/spring-config/spring-bean.xml

<bean id="linkCheck" 
    class="com.dogwatch.util.LinkCheck"> 
    <property name="linkDao" ref="jdbcLinkDao" /> 
</bean> 

De/projet COFFRE/guerre module/src/main/webapp/WEB-INF/printemps-config/printemps-dao.xml

<bean id="jdbcLinkDao" class="com.dogwatch.util.jdbcLinkDao"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="linkJdbcDataTypesSupport" ref="linkJdbcDataTypesSupport"/> 
</bean> 

Le haricot DAO est connu pour être bon et fonctionne dans plusieurs autres classes. Je l'ai comparé à d'autres classes qui utilisent le même bean DAO et je ne trouve aucune différence.

je vois le grain se définit dans:

INFO [2010-01-15 01: 10: 05838] [principal] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - Chargement Définitions de bean XML de l'URL [fichier: war-module/src/main/webapp/WEB-INF/source-config/spring-dao.xml] INFO [2010-01-15 01: 10: 05,858] [principal] [XmlBeanDefinitionReader] [XmlBeanDefinitionReader.java:323] - Chargement des définitions de bean XML à partir de l'URL [file: war-module/src/mai n/webapp/WEB-INF/printemps-config/spring-bean.xml] INFO [2010-01-15 01: 10: 06,597] [principal] [DefaultListableBeanFactory] [DefaultListableBeanFactory.java:414] - Pré -instanciation des singletons dans org.s[email protected]3c01d5a0: définition des beans [(snip) jdbcLinkDao, linkCheck (snip) businessLoggingAspect, org.springframework.beans.factory.config.PropertyPlaceholderConfigurer # 1]; racine de la hiérarchie d'usine

Est-ce que quelqu'un a des suggestions sur la façon de résoudre les problèmes d'injection de haricots?

+0

Typo menant aux deux premières réponses fixes. – wadesworld

+1

Il nous manque encore des informations, par exemple comment le code qui utilise le bean linkCheck l'obtient-il? Est-il également injecté? Le récupérez-vous dans le contexte du printemps? Je suppose que vous ne faites pas de nouveau LinkCheck(), mais puisque vous êtes nouveau à Spring, c'est une question de départ raisonnable. – SteveD

+0

@Wade: Corrigez votre 'spring-dao.xml' aussi. Merci. Et oui, répond Stevendick. –

Répondre

8

Je développe mon commentaire de la question OP car il semble avoir aidé ...

Il nous manque encore des informations, par exemple comment le code qui utilise le bean linkCheck l'obtient-il? Est-il également injecté? Le récupérez-vous dans le contexte du printemps? Je suppose que vous ne faites pas new LinkCheck(), mais puisque vous êtes nouveau au printemps, c'est une question de départ raisonnable.

Le ressort ne peut injecter les beans que s'il contrôle la création des beans: si vous faites new MyClass() alors le conteneur Spring ne connait pas l'objet et ne peut pas faire l'injection.

+1

+1 Maintenant le tour de Wade. ;) –

1

Il existe un problème potentiel en ce que le type de 'jdbcLinkDao' est 'jdbcLinkDao' mais le type d'argument du setter est LinkDAO. (! Si « jdbcLinkDao » est un sous-type de « LinkDAO » qui est probablement OK ... mais FIX LE NOM DE CLASSE)

Si ce n'est pas le problème, je vous suggère:

  • mis le journal Si vous ne voyez rien, ajoutez une impression de trace à LinkCheck.setLinkDAO() pour voir quelle valeur est en train d'être définie ... et quand elle est définie.

Questions connexes