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

最近在创建一个多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)之下。

 

你可能感兴趣的:(java,#,spring)