【低级坑记录01】SpringBoot 多模块项目(module)Service自动注入(@Resource)
近期打算使用 SpringBoot 开始独立搭建一个项目,因此使用Spring-boot 先进行了多模块的拆分,拆分的后如下: 其中 service 依赖 clinet, web 依赖 client、service
接口的实现包路径, client 下 interface、 service 下 serviceImple, web 下Controller 和 Application启动类
其中
而后开始编写接口,结果在运行时遇到了报错:
Error creating bean with name ‘xxxController’: Injection of resource dependencies,
Consider defining a bean of type ‘com.example.service.xxxService’ in in your configuration. 的报错,该问题的原因一般都是:项目已被分解为不同的模块,需要指定独立模块要扫描的类或包,
解决思路是:
- 在 Application启动类上指定扫描的包,我的项目包路径都是 com.example ,因此在启动类上增加
@ComponentScan(basePackages = “com.example.*”)
, 再次启动, 还是报错,问题没有解决, 再去度娘找答案,还是一无所获, 大家的思路都是上述解决方案,或者在 @ComponentScan 进行指定类, 即指定interface和serviceImpl所在包和 controller所在包,修改为如下:
@ComponentScan(basePackages ={ “com.example.service”, “com.example.controller”})
分析了下这个写法跟 com.example.* 的写法完全一致,因此运行结果还是预期的报错,此时尝试了下仅保留 com.example.service, 进行运行,即修改为
@ComponentScan(basePackages ={ “com.example.service”})
结果启动ok了, 感觉问题解决了, 然并卵, 访问接口后报404 , 但是这个action 让我意识到应该是最终运行的包问题,那么问题应该出在打包的设置中, 果断去看 blog-web中的打包的设置,发现缺少以下配置项 repackage , 该配置项 可以把依赖的包都打包到生成的Jar包中, pom中添加后,再次运行一切ok了!!!
完整的打包设置如下
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
特此记录下该问题的解决过程,cg: 报错问题相对容易定位,但是实际解决真的需要关注每个细节啊, 真的没想到是之前拆分遗留的坑最终导致的,没有继续深挖深层次的原因,留待后续后续吧! _