自动连线的服务返回null

时间:2019-07-31 18:56:36

标签: java spring autowired

请参见以下代码,我正在尝试学习@Autowire属性,因此请尝试以下示例。 但是我收到了空指针异常。

@Component
class GoodNightService {

    public String SayGoodNight() {
        return "Good night";
    }
} 

public class DependencyInjectionExample {

    @Autowired
    GoodNightService goodnightservice;

    public String printHigh()
    {
        return goodnightservice.SayGoodNight();
    }
}

您可以看到我已经创建了一个组件,因此可以使用它创建bean。 我正在尝试通过@Autowired属性使用依赖项注入原理。 因此,创建了一个“ DependencyInjectionExample”类并自动连接了服务。

我创建了以下主要功能来获取示例类的对象。

public static void main(String[] args) {

    DependencyInjectionExample dependencyexample = new DependencyInjectionExample();
    System.out.println(dependencyexample.printHigh()); 

}

但是我得到了nullpointer异常:

  

线程“ main”中的异常java.lang.NullPointerException在   com.example.first.mySimpleSpringApp.DependencyInjectionExample.printHigh(DependencyInjectionExample.java:13)     在   com.example.first.mySimpleSpringApp.GoodNightServiceImpl.main(GoodNightServiceImpl.java:9)

1 个答案:

答案 0 :(得分:2)

首先,您不调用负责注册bean的应用程序上下文:

SpringApplication.run(MainClass.class, args);

第二,您手动创建DependencyInjectionExample。

它永远不会以这种方式工作。 如果您想做类似的事情,则需要这样编码:

public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(MainClass.class, args);
    DependencyInjectionExample dependencyexample  = context.getBean(DependencyInjectionExample.class);
    System.out.println(dependencyexample.printHigh()); 
}