【发布时间】:2019-04-09 20:53:45
【问题描述】:
我有一个与配置类不同的包中的存储库,因此我使用@Repostiory 将其注释为以下内容:
package test;
@Repository
public interface UserTest extends JpaRepository<User, Long> {
}
我已经对其进行了组件扫描,但它不起作用:
package com.app;
@SpringBootApplication
@ComponentScan({"test","com.app"})
public class Application extends SpringBootServletInitializer {
}
例外:没有可用的“test.UserTest”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。
除非我添加 enableJpaRepositories ,否则为什么组件扫描不能在存储库上工作?我认为 componetScan 就足够了
更新:
由于一些答案提供了解决方案,我问的是解释而不是解决方案。以下内容甚至无需对“测试”进行组件扫描即可工作:
SpringBootApplication
@EnableJpaRepositories({"test","com.app"})
public class Application extends SpringBootServletInitializer{
}
现在的问题是,当它不起作用时,为什么我什至需要在 @Repository 上使用组件扫描?为什么在文档中 @Repository 被组件扫描扫描时它没有效果并且 @EnableJpaRepostiories 是 enoguh?
来自关于组件扫描的 Spring 文档: 指示是否应启用对使用 @Component @Repository、@Service 或 @Controller 注释的类的自动检测。
在我的情况下,@Repository 未被检测到
【问题讨论】:
-
如果您从 Spring 存储库扩展以使用基本的 CRUD 操作,则需要通过 @EnableJPARepositories 启用它们,以便 springboot 在运行时检测和初始化它们的实现。
-
@TürkmenMustafaDemirci aaah 你的意思是,如果我创建自己的存储库,它会起作用吗?
-
我想它应该在没有 @enableJPARepositories 的情况下工作。试一试,请告诉我们我也想知道的结果。
-
@MohammadKarmi 我建议您创建一个像 com.app.repository 这样的包并将您的存储库类移到那里,然后在运行器上添加 @EnableJpaRepositories("com.app.reporsitory")。
-
@MohammadRezaAlagheband 再次我知道解决方案,它会起作用,但我要求解释
标签: java spring-boot webapp2 component-scan