2016-10-02 62 views
0

嘗試自動裝配屬性的Spring bean,但仍然獲得NPE。摘錄:春天框架空指針異常

INFO: Loading XML bean definitions from class path resource [autoWireByName.xml] 
Exception in thread "main" today do push-ups for 30 mins 
java.lang.NullPointerException 
    at com.springAutoWireByName.KabadiCoach.getFortune(KabadiCoach.java:23) 
    at com.springAutoWireByName.AutoWireByName.main(AutoWireByName.java:13) 

KabadiCoach.java

package com.springAutoWireByName; 

public class KabadiCoach { 

    private SadFortune sadFortune; 

    /*public KabadiCoach(){ 

     System.out.println("inside default Constructor"); 

    }*/ 
    public String getDailyWorkout() 
    { 
     return "today do push-ups for 30 mins"; 
    } 
    public void setSadFortune(SadFortune fortune) { 

     sadFortune = fortune; 
    } 

    public String getFortune() {  

     return sadFortune.getSadFortune(); 
    } 
} 

SadFortune.java

package com.springAutoWireByName; 

public class SadFortune { 

    public String getSadFortune() 
    { 
     System.out.println(); 
     return "your day wont be good enough Sorry!!!"; 
    }  
} 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd"> 

<!-- bean definitions here --> 

<bean name="Fortune" class="com.springAutoWireByName.SadFortune"> 
</bean> 
<bean id="myCoach" class="com.springAutoWireByName.KabadiCoach" autowire="byName" /> 


<!-- this is just a prototype to define actual just make use of this file--> 

</beans> 

主要

package com.springAutoWireByName; 

import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AutoWireByName { 

    public static void main(String[] args) { 

     ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("autoWireByName.xml"); 

     KabadiCoach co = context.getBean("myCoach",KabadiCoach.class); 
     System.out.println(co.getDailyWorkout()); 
     System.out.println(co.getFortune()); 
    } 
} 

運行上面的代碼後我收到錯誤消息作爲列出,當我改變方法靜態

public static String getSadFortune() 
{ 
    System.out.println(); 
    return "your day wont be good enough Sorry!!!"; 
} 

在2類我得到所需的輸出。爲什麼?

回答

0

基本上,SadFortune成員仍然爲空,這就是爲什麼它的工作方式,如果getSadFortune()方法將靜態。

到目前爲止,你只告訴Spring實例化財富bean和KabadiCoach,但你必須告訴Spring,KabadiCoach中的一些成員也需要自動裝配。

試試這個在Spring配置文件:

<bean id="fortune" class="com.springAutoWireByName.SadFortune"></bean> 
<bean id="myCoach" class="com.springAutoWireByName.KabadiCoach" autowire="byName"> 
    <property name="fortune" ref="fortune" /> 
</bean> 

編輯:對不起,overread的autowire="byName"屬性。在這種情況下,您可能只需以小寫形式寫入名稱。

<bean id="fortune" class="com.springAutoWireByName.SadFortune"/> 
<bean id="myCoach" class="com.springAutoWireByName.KabadiCoach" autowire="byName"/>