解决SpringBoot扫描不到公共类的实体问题

SpringBoot扫描不到公共类的实体

我的项目结构是

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打包后发现并不是。哈哈

下面是将ademo打包了的结构

代码证明如果加上

@ComponentScan({“com.example.ademo”,“com.example.bdemo”})

是可以扫描到UserService类的,如果不加是获取不到的,应该跟SpringBoot底层加载类是相关的,大家有兴趣可以去看一下底层,在底层的我就不再这里讲了,自己去看吧。

springboot打包,找不到pojo实体类

修改spring-boot-maven-plugin组件

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot 没法扫描到repository的解决

    sprint boot2.0启动的时候报错! A component required a bean of type 'XXX' that could not be found. 就是没有扫描到我的repository包里的代码 我先用@ComponentScan注解加上类所在的包名,没有报错,可以正常启动 但是坑爹的是@RestController注解下的Controller层的代码没有扫描到 就是说http://127.0.0.1:8080可以正常访问,但是Controller层配置的@Re

  • 解决SpringBoot整合Mybatis扫描不到Mapper的问题

    闲来无事,想学学springboot,开始搭建一个项目,但是一直显示mapper扫描不到的错误: "Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsa

  • springboot多模块包扫描问题的解决方法

    问题描述: springboot建立多个模块,当一个模块需要使用另一个模块的服务时,需要注入另一个模块的组件,如下面图中例子: memberservice模块中的MemberServiceApiImpl类需要注入common模块中的RedisService组件,该怎么注入呢? 解决: 在memberservice模块的启动类上加上RedisService类所在包的全路径的组件扫描,就像这样: 注意启动类上方的注解@ComponentScan(basePackages={"com.whu.comm

  • SpringBoot扫描不到Controller的解决方案

    SpringBoot小白创建项目,扫描不到Controller一系列问题 1. 2. 3. 4. 5. 6.还有一种办法是在启动服务类的入门,添加@ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx.xx"})里面的是包的全限定名,可以为多个 SpringBoot 自定义controller无法扫描到 SpringBoot 自定义controller路由找不到,原因是启动类和自定义的Controller包不在同一级目录

  • 解决SpringBoot扫描不到公共类的实体问题

    SpringBoot扫描不到公共类的实体 我的项目结构是 parent ademo bdemo parent是一个大项目,项目里面有web.service和entity三个子项目 ademo 依赖于bdemo里面的实体. aProject项目的包结构是com.test.ademo bProject项目的包结构是com.test.bdemo 以下的问题是我没有忘记标注@Component.@Service等容器注解 在ademo项目里面使用@Autowired的时候有异常说是可能会Autowire

  • 解决springboot没有启动标识,启动类也没有启动标识的问题

    目录 springboot没有启动标识的问题 第一种方法 第二种方法 springboot启动标识修改 springboot没有启动标识的问题 第一种方法 检查看到没有target文件夹 不知道跟这个有没有关系, 既然没有target文件夹,我就去看了下maven, 结果在右侧Maven Projects没发现该项目,猜测可能是没检测到该项目 在Maven Projects点击+号,选中该项目的pom,xml, 右下角出现检测,成功. 第二种方法 在Maven Projects点击+号,选中该项

  • 解决SpringBoot 测试类无法自动注入@Autowired的问题

    原来的测试类的注解: @RunWith(SpringRunner.class) @SpringBootTest 一直没法自动注入,后来在@SpringBootTest, 加入启动类Application后就可以了 @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) 补充:spring boot项目单元测试时,@Autowired无法注入Service解决方式 首先确认: 测试类所在包名要和启动类一致

  • springboot扫描引入jar包的service等组件方式

    在pom中引入对应的依赖,如果引入的三方jar包跟该项目Application所在包目录包含被依赖jar包目录, 即下面的情况: 像上面这种包组织的话,是不需要额外加入任何配置的(前提是依赖jar包相应组件一定要有@Component等注解修饰),因为springboot项目默认扫描目录就是Application所在目录及子目录,但是这种情况仅限于单个项目安排,项目大了就不一定满足了, 这时可以通过下面的方式引入扫描路径: 或者通过@ComponentScan注解也可以,需要注意的是不要忘了扫描

  • 解决SpringBoot引用别的模块无法注入的问题

    目录 引用别的模块无法注入的问题 问题描述 解决方法 多模块项目中无法注入其他模块的springbean 引用别的模块无法注入的问题 前段时间尝试着利用空闲时间搭建了一个IIM消息通信系统,目前还是Demo级别,具体实现还在不断补充,在开发过程中遇到了一个小问题,在此分享出来,猛男请忽略. 问题描述 由于前期搭建的比较匆忙,搁那狂写调用逻辑,没注意自己的包名有点奇怪. 目前是分为这三个模块,客户端,公共处理模块,服务端,不过我正在琢磨着给这玩意再整个路由注册中心,便于客户端和服务端的横向拓展.

  • springboot扫描自定义的servlet和filter代码详解

    这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** * Created by xiaxuan on 16/11/1. */ @WebFilter(urlPatterns = "/*",filterName="CharacterEncodeFilter", initParams={ @WebInitParam(name="encoding",value="UTF-8&qu

  • 解决SpringBoot多模块发布时99%的问题

    解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案 如果使用 SpringBoot 多模块发布到外部 Tomcat,可能会遇到各种各样的问题.本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数 SpringBoot 发布问题. SpringBoot 多模块发布的 8 大原则 1 在发布模块打包,而不是父模块上打包 比如,以下项目目录: 如果要发布 api 就直接在它的模块上打包,而

  • 解决springboot的aop切面不起作用问题(失效的排查)

    检查下springboot的启动类是否开启扫描 @SpringBootApplication @ComponentScan(basePackages = {"com.zhangpu.springboot"}) 另外springboot默认开启的EnableAspectJAutoProxy为true 如果不放心可以增加: @EnableAspectJAutoProxy(proxyTargetClass=true) 第二种可能: 没有导入 相关的jar <dependency>

  • 解决springboot中配置过滤器以及可能出现的问题

    在springboot添加过滤器有两种方式: 1.通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中需要增加cookie可能会存在写不进前端情况) 2.通过注解@WebFilter的方式 通过创建FilterRegistrationBean的方式创建多个filter以及设置执行顺序: 1.创建两个实现Filter接口的类TestFilter1 .TestFilter2 package com.aoxun.c

随机推荐