【问题标题】:Autowired service returning null [duplicate]自动装配服务返回 null [重复]
【发布时间】:2019-07-31 18:56:36
【问题描述】:

请查看以下代码,我正在尝试学习@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()); 

}

但我得到空指针异常:

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

【问题讨论】:

  • 您需要启动 Spring 应用程序以便注入您的依赖项,例如 SpringApplication.run(Application.class, args);
  • 为了让 Spring 连接你的 bean,你需要让 Spring 初始化 bean。这可以通过programmatically 或通过将DependencyInjectionExample 连接到另一个bean 来完成。
  • 我已经试过了,还是一样的问题。我什至尝试过@Controller 注解。
  • 还要保证Spring应用可以组件扫描包。
  • @joy 如果你这样做了,那你就做错了。如果您希望 Spring 为您连接 bean,您不能自己实例化实例(即使用 new)。

标签: java spring autowired


【解决方案1】:

首先,您不要调用负责注册 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()); 
}

【讨论】:

  • 感谢 mslowiak,上面的代码有效。所以基本上,我搞砸了 spring 框架中的对象创建。如果类被标记为“组件”,我们不应该在 Spring 中使用 new 关键字创建对象。因为当我们将它标记为“组件”时,它会创建一个最终只会给我们一个实例的 bean。如果我错了,请纠正我!
  • @joy 是的。是这样的。
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 2016-12-17
  • 2013-08-15
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2019-01-19
相关资源
最近更新 更多