SpringBoot扫描不到公共类的实体

在SpringBoot项目中,由于ademo项目依赖bdemo的实体,但扫描不到导致@Autowired失败。即使没有遗漏@Component、@Service等注解,仍然出现空指针异常。解决方案包括:统一两个项目的包名或在ademo启动类中使用@ComponentScan指定扫描包路径。需要注意@ComponentScan会覆盖@SpringBootApplication默认的扫描范围。打包后项目结构验证了@ComponentScan的必要性。
摘要由CSDN通过智能技术生成

我的项目结构是
parent

  • ademo
  • bdemo

parent是一个大项目,项目里面有web、service和entity三个子项目 ademo 依赖于bdemo里面的实体。
aProject项目的包结构是com.test.ademo
bProject项目的包结构是com.test.bdemo

以下的问题是我没有忘记标注@Component、@Service等容器注解。
在ademo项目里面使用@Autowired的时候有异常说是可能会Autowired失败,但是编译没有问题,我就直接run项目,执行结果是报空指针异常,说明对象确实自动导入失败了。经过很多查阅后发现只需要将两个项目的包名改成一样的就可以,或者使用@ComponentScan在启动类上面加入ademo和bdemo的包名即可

  1. 将ademo和bdemo的包名改成com.test.project
  2. 在ademo的启动类上面加上@ComponentScan({“com.example.ademo”,“com.example.bdemo”})
    在执行第二点的时候注意就是如果在启动类上面标注了@ComponentScan就会使会使@SpringBootApplication注解中包含的@ComponentScan注解(即默认的扫描包的位置)失效

具体原因:
因为启动类上面的@SpringBootApplication里面默认包含了一个@ComponentScan注解,这个注解默认情况下是扫描该类所属包下面的所有类,包含子目录中的类。

因为所有网上的注解都是上面那样的所以我就去想着是不是打包的时候将bdemo的项目跟ademo可结合在了一起所以拿不到com.test.ademo包下的文件,但是拿mvn打包后发现并不是。哈哈<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值