如何修复“无法自动装配。找不到'MyRepository'类型的bean”错误?

5

我在项目中有这样的层次结构:

 server
   myproject
     src
       main
         java
           rest
             repository
              Ⓘ MyRepository
         resources
       test
         java
           rest
            Ⓒ MyRepositoryTest

这是MyRepository接口:
public interface MyRepository extends MongoRepository<String, Integer> {
}

这是MyRepositoryTest测试类:

@ExtendWith(SpringExtension.class)
public class MyRepositoryTest {
    ...
    @Autowired MyRepository myRepository;
    ...
}

测试类中出现了自动装配的myRepository实例的错误。它会提示无法自动装配。找不到'MyRepository'类型的bean。我已经尝试添加@Component@Repository等,但并没有真正帮助解决问题。如何解决这个问题?


我不确定那是真的,因为我以前做过。我刚刚重构了这个项目,在那之前它是可以工作的,即使我使用了完全相同的Repository进行自动装配。 - TheStranger
当你运行它时,它也失败了吗?还是你的IDE(IntelliJ?)在鼠标悬停时显示错误? - MevlütÖzdemir
@MevlütÖzdemir 当我运行它时,它也失败了。 - TheStranger
4个回答

4

你可以尝试这样做,在AppConfig类的@ComponentScan中设置你的包:

@ContextConfiguration(classes = AppConfig.class)
@ExtendWith(SpringExtension.class)
public class AdminEvaluatorTest {
    @Autowired MyRepository myRepository;

    @Configuration
    @ComponentScan("com.<your-package>")
    public static class AppConfig {
    }
}

我之前的错误已经消失了,但是现在当我运行测试时,它会显示java.lang.IllegalStateException: Failed to load ApplicationContext - TheStranger
现在它是否正常工作?@Ben - MevlütÖzdemir
不,它还没有起作用。@ContectConfiguration 只是把问题转移到了其他地方,现在我又遇到了另一个问题:https://stackoverflow.com/questions/71124665/why-do-i-keep-getting-the-failed-to-load-applicationcontext-exception?noredirect=1#comment125727713_71124665 - TheStranger

2

你可以尝试指定应该包含在组件扫描中的基本包。例如:

@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.model"})

这个注解表示组件扫描应该包括 com.example.demo 和 com.example.model 包。这意味着 Spring 将在这些包中搜索并注册任何 Spring 管理的组件(例如 @Controller、@Service 和 @Repository bean),并使它们可用于依赖注入。


0
你的主类下是否有 @SpringBootApplication 注解下的 @EnableAutoConfiguration?尝试设置一下。
@SpringBootApplication
@EnableAutoConfiguration
....
public class MyProject{

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

}

冗余注释 - undefined

0

看起来框架没有扫描应用程序中具有测试类的包

从上面共享的层次结构中,MyRepository接口的包是“rest.repository”,而MyRepositoryTest类的包是“rest”。

尝试将MyRepositoryTest类的包也更改为“rest.repository”。这应该可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接