springboot无法注入@Repository注解的JpaRepository类

55 篇文章 1 订阅

最近在创建一个多module的springnoot项目时,发现项目启动一直扫描不到@Repository注释的类。

报错如下:

Description:

Field helloService in com.example.demo.service.TestService required a bean of type 'com.example.test.modules1.service.repository.HelloRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.test.modules1.service.repository.HelloRepository' in your configuration.

意思是spingboot没有将HelloRepository加载到spring Ioc中,导致其他地方使用@Autowired无法congspring Ioc中得到HelloRepository并注入TestService 中。

我的启动类中已经包含了@SpringBootApplication(scanBasePackages={"com.example.test.modules1"})。接口中也加入了注解@Repository

找了好久才发现是我的启动类的原因。

先将一下我的项目module组成。一共有两个模块,一共而启动模块(start),一个是业务模块(module1),所有的木块的包总路径都是com.example.test。问题就出现在我的项目启动类TestApplication上。我的TestApplication的路径是com.example.test.start.TestApplication这样就会导致项目扫描不到com.example.test.module1下面的@Repository的接口。

原因是 在使用Spring-data-jpa时,通常都是继承Repository接口相关的其他接口,然后Spring-data-jpa在项目启动时,会为所有继承了Repository的接口(@NoRepositoryBean修饰除外)创建实现类,并交由Spring管理。当启项目动类代码Application处于HelloRepository、TestService的根目录中,所以HelloRepository是可以被成功注入到TestService中的。但是 如果将Application移动到其他平行目录或者子目录,就算使用scanBasePackages指定扫描目录也无法将HelloRepository成功注入,会产生如下错误描述:

Action:

Consider defining a bean of type 'com.example.test.modules1.service.repository.HelloRepository' in your configuration.

解决办法就是将启动类TestApplication,建立在根目录(com.example.test)之下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值