spring - @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 应用程序启动时是否有另一种方法来运行方法?
解决方案
因为您不能 @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();
}
}
推荐阅读
- sql-server - 在 AWS 上使用 SQL Server 引擎创建 RDS 数据库时没有建议免费选项
- c# - 为什么wav文件大小超过4gb?
- freeradius - FreeRadius:无法从断开请求中删除不需要的属性
- c# - 传入的 XML 区分大小写问题
- java - 到 Oracle Cloud ATP 19c 的 JDBC 连接
- laravel - 使用 spatie/laravel-query-builder 和 teamtnt/laravel-scout-tntsearch-driver
- java - 模拟 FeignCLient 时,Mockito.when() 在单元测试中不起作用
- python - Torchtext TabularDataset() 读取数据字段不正确
- android - FirebaseDatabase.getInstance().reference 的地址错误(来自不同地区)
- swift - SWIFT 在隐式展开可选值时意外发现 nil