исключение нулевого указателя spring framework

Пытается autowire 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.Ява

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();
    }
}

Печаль.Ява

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 
       
       
       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 классе я получил желаемый результат. Почему?

1 ответ

  1. В основном элемент SadFortune по-прежнему равен null, поэтому он работает, если метод getSadFortune() будет статическим.

    До сих пор вы только говорите Спринг создать экземпляр фасоли удачи и KabadiCoach, но вы должны сказать Спринг, что некоторые члены в 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>
    

    EDIT: извините, перечитал autowire="byName"атрибут. В этом случае вы, вероятно, просто напишите имя в нижнем регистре.

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