IntelliJ报无法装配BoardingPassRepository但程序正常运行如何解决
问题说明
已为BoardingPass实体创建基础MongoDB Repository接口:
@Repository public interface BoardingPassRepository extends MongoRepository<BoardingPass, String> { }
注入该Repository时IntelliJ标红提示Could not autowire. No Beans of "BoardingPassRepository" found.,手动添加@EnableMongoRepositories指定扫描该Repository后,应用可正常启动运行,但IDE错误提示未消失。
当前启动类代码如下:
@SpringBootApplication @EnableMongoRepositories(basePackageClasses = BoardingPassRepository.class) public class Main implements CommandLineRunner { @Autowired private BoardingPassRepository repository; public static void main(String[] args) { SpringApplication.run(Main.class, args); } @Override public void run(String... args) throws Exception { } }
修复方案
按优先级从高到低可选择以下方案,在不影响程序正常运行的前提下消除IDE误报:
- 调整启动类包位置,移除冗余配置
将启动类Main移动到项目所有业务代码、Repository所在包的根路径下,例如Repository在com.xxx.project.repository包,启动类就放在com.xxx.project包。Spring Boot默认会扫描启动类所在包及子包下的所有组件,自动识别MongoRepository接口生成实现Bean,不需要手动添加@EnableMongoRepositories注解,IntelliJ也能正常识别注入的Bean,不会出现误报。 - 修正代码格式问题
你当前代码中@Autowired注解没有做类内缩进,和类定义同级,会干扰IDE的代码识别。调整注解和字段的缩进,对齐类内其他方法的格式:@SpringBootApplication @EnableMongoRepositories(basePackageClasses = BoardingPassRepository.class) public class Main implements CommandLineRunner { @Autowired private BoardingPassRepository repository; public static void main(String[] args) { SpringApplication.run(Main.class, args); } @Override public void run(String... args) throws Exception { } } - 替换字段注入为构造器注入
IntelliJ对字段注入的动态代理Bean识别率较低,换成构造器注入(Spring 4.3+单构造器场景不需要额外加@Autowired)可解决大部分误报问题:@SpringBootApplication @EnableMongoRepositories(basePackageClasses = BoardingPassRepository.class) public class Main implements CommandLineRunner { private final BoardingPassRepository repository; public Main(BoardingPassRepository repository) { this.repository = repository; } public static void main(String[] args) { SpringApplication.run(Main.class, args); } @Override public void run(String... args) throws Exception { } } - 重建IDE索引
若代码配置没有问题,大概率是IntelliJ索引异常导致的误报。依次点击菜单栏File > Invalidate Caches...,勾选清除缓存选项后点击Invalidate and Restart,等待IDE重启完成索引重建后,错误提示会自动消失。 - 调整IDE检查级别
若以上方案都不想用,可以直接修改注入检查的提示级别:打开IntelliJ设置,找到Editor > Inspections > Spring > Spring Core > Code > Autowiring for Bean Class,将提示级别从Error调整为Warning或更低级别,即可关闭该错误提示,不影响其他正常代码检查。
内容的提问来源于stack exchange,提问作者sebastian307
相关产品推荐
相关产品推荐

