首页 > 解决方案 > @Autowired 表示法没有按预期工作

问题描述

@SpringBootApplication
public class MainApplication {

    @Autowired
    static BibliographyIndexer bi;

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
        bi.reindex();
    }

}


@Repository
public class BibliographyIndexer {
    ...
}

每当我访问的属性时,bi我都会得到一个NullPointerException. 我知道@Autowired符号不起作用。但为什么?

注意:两个类都在同一个包下。

附加问题:因为我想在 spring 应用程序启动时运行一个方法。这是最好的方法吗,因为@pepevalbe 的回答已经给了我需要的解决方法。在 spring 应用程序启动时是否有另一种方法来运行方法?

标签: springspring-bootautowired

解决方案


因为您不能 @Autorwire 静态类。它没有被初始化,所以你在尝试使用它时会得到一个 NPE。

有一些变通方法可以将 bean 连接到静态类,但强烈建议不要这样做。

编辑: 如果您需要在初始化后执行代码,您可以添加一个事件侦听器:

@SpringBootApplication
public class MainApplication {

    @Autowired  
    BibliographyIndexer bi;

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }

    @EventListener(ApplicationReadyEvent.class)
    public void doAfterStartUp() {
        bi.reindex();
    }
}

推荐阅读