一、问题由来

  目前刚入职一家新公司不久,公司的新项目采用DDD驱动领域设计来进行开发,架构这一块使用的是阿里巴巴开源的最新框架COLA4.0的架构。

主要是这个框架里面的分层设计。主要分为四层:adapter适配层类似于以前的Controller层;app层类似于以前的Service层;domain层是领域层;还有

一个infrastructure层表示基础设施服务层,提供基础服务,比如数据库服务。项目还是进行设计阶段,自己主要负责开发这一块。由于大家都是刚开始

接触DDD这个新知识,因此还有很多东西都需要学习。由于我们负责的这个项目属于通用域,而且人手也不是太多,因此很多东西都需要亲力亲为。

比如说搭建项目框架,基础架构采用cola4.0,里面具体使用什么版本的SpringBoot,SpringCloud,Redis,Postgresql等等,都得我们自己来定。自己

也没闲着,立马去学习Cola4.0这个框架,由于这种设计理念很是新颖,因此在网上可供参考学习的资料很少。不像什么SpringBoot,springCloud之类的

课程,一搜就一堆的答案。Cola4.0的框架的大致架构如图所示:

详细的错误信息如下:

a component required a bean of type xxxxxx that could not be found
Action
Consider defining a bean of type xxxxxx in your configuration

二、问题分析

  从错误信息来看,大致意思就是组件找不到类型为xxxxxx的bean,可以考虑在配置中定义一个bean。自己根据实际情况来判断报错的类型是一个接口,

这个接口有具体的实现类,实现类中使用的注解为@Component.这个接口有在其他地方被使用,启动项目时由于这个类没有被加载到,因此报这个错。能

确定一点就是接口的实现类没有被加载到,可是为什么没有被加载到呢?框架是我们按照cola4.0的架构自己来搭建的,它里面就是一些简单的骨架,没有

具体封装一些代码之类的,我们用的话也只会考虑使用它的架构。这就很让人疑惑,使用原作者的框架就可以正常运行,怎么自己来搭建就不行了呢?

三、解决方案

拿到这个错误信息,自己立马开始使用搜索引擎。由于这个项目比较特殊,启动类是单独为一个start项目,主要作用就是用来启动

项目,不做其他任何事情。

尝试方案一:

推测接口实现类中没有添加对应的注解,所以不能被扫描到。

自己经过检查,发现所有的接口实现类都添加了@Component注解。会不会有这种可能,这个注解不生效?

于是自己换成@Service注解,重新启动项目,发现问题任然未解决。

参考文章 https://blog.csdn.net/qq_39691492/article/details/118085232

尝试方案二:

推测导致这个错误的原因可能是由于接口的实现类没有被扫描到,没有正确加载到spring容器中,最终出现问题。

使用@ComponentScan包扫描注解,把接口实现类的包路径放进去,然后重新启动项目。结果为解决。

参考文章 https://blog.csdn.net/suxiexingchen/article/details/84984349

尝试方案三:

推测可能是包结构不对导致来加载错误。这到是有可能,然后自己仔细检查了项目的包结构,排除此问题,包结构

没有问题,还是没有解决。

https://blog.csdn.net/Julycaka/article/details/80622754

这时候自己就开始分析,说先确定一点接口的实现类没有被加载到spring容器中,为什么会没有被加载到呢?然后自己

倒回去看看cola4.0的例子,查看模块之间的相互引用关系,这时发现问题了。demo例子中app层直接引用了infrastructure,

我们自己搭建的框架中没有做这个引用,这就导致infrastructure层中的代码没有被正确扫描到,继而不能被加载到spring容器中。

自己立马去app层中添加该模块,然后重新启动项目,发现启动成功,问题解决。

总结:使用maven进行多模块开发的时候,需要确保所有的模块中的包路径都能被扫描到,否则就会导致类加载不了的问题。

不管是直接引用还是间接引用,只有所有的模块都和启动类关联起来后,项目才能够正常启动。我们的项目中引用关系如下:

start层 引用 adapter层;

adapter层 引用 app层;

app层 引用 domain层;app层 引用 infrastructure层;

infrastructure层 引用 domain层;

common层被除start层外的所有模块引用;

这样虽然项目启动层start中只有一个启动类,通过这种直接的或者是间接的引用关系就可以加载所有的bean对象。

a commponent required a bean of type XXXXXX that could not be found-2022新项目的更多相关文章

  1. Field redisTemplate in xxxxxx required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.

    *************************** APPLICATION FAILED TO START *************************** Description: Fie ...

  2. Sping Cloud项目启动报A component required a bean of type 'com.tianyan.bbc.dao.SecurityUserBaseMapper' that could not be found.

    项目构建正常,启动和Debug报以下错误: Error starting ApplicationContext. To display the conditions report re-run you ...

  3. 2. springboot启动报错:Field userMapper in com.service.UserService required a bean of type 'com.dao.UserMapper' that could not be found.

    报错信息: 2018-06-25 14:26:17.103  WARN 49752 --- [  restartedMain] ationConfigEmbeddedWebApplicationCon ...

  4. SpringCloud报错: "Field discoveryClient in com.controller.DcController required a bean of type 'com.netflix.discovery.DiscoveryClient' that could not be found."

    SpringCloud报错: "Field discoveryClient in com.controller.DcController required a bean of type 'c ...

  5. spring eureka required a bean of type 'com.netflix.discovery.DiscoveryClient' that could not be found.

    spring在集成第三方过程很容易出现类名相同,且基本作用相同的类.这样给初学者带来一定的困惑. 导致用错类而出现以下问题. required a bean of type 'com.netflix. ...

  6. maven多模块启动required a bean of type com.xxx.xxx.service that could not be found.

    Description: Field testService in com.xxx.xxx.api.controller.TestController required a bean of type ...

  7. Field userService in com.wuji.controller.UserController required a bean of type 'com.wuji.service.UserService' that could not be found

    Field userService in com.wuji.controller.UserController required a bean of type 'com.wuji.service.Us ...

  8. 解决办法 Field userService in com.sxsj.controller.RegistLoginController required a bean of type

    转自:https://blog.csdn.net/awmw74520/article/details/82687288 APPLICATION FAILED TO START Error starti ...

  9. Spring Cloud Ribbon负载均衡配置类放在Spring boot主类同级增加Exclude过滤后报Field config in com.cloud.web.controller.RibbonConfiguration required a bean of type 'com.netflix.client.config.IClientConfig' that could not b

    环境: Spring Cloud:Finchley.M8 Spring Boot:2.0.0.RELEASE 目录结构: 可以看到代码第13行的注释,我已经在@ComponentScan注解中添加了E ...

随机推荐

  1. 一个注解@Recover搞定丑陋的循环重试代码

    使用背景 在实际项目中其中一部分逻辑可能会因为调用了外部服务或者等待锁等情况下出现不可预料的异常,在这个时候我们可能需要对调用这部分逻辑进行重试,代码里面主要就是使用for循环写一大坨重试的逻辑,各种 ...

  2. Tomcat警告之“资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间”

    原因 缓存不够,可以将其缓存调大 解决办法: 在 /conf/context.xml 的 前添加以下内容: <Resources cachingAllowed="true" ...

  3. 学习移动机器人SLAM、路径规划必看的几本书

    作者:小白学移动机器人链接:https://zhuanlan.zhihu.com/p/168027225来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 声明:推荐正版图 ...

  4. 【Android开发】【布局】自定义底部菜单栏(中间图标凸起)

    我的Demo 参考: http://blog.csdn.net/xh870189248/article/details/75808341 http://blog.csdn.net/xh87018924 ...

  5. java中如何使用接口继承(Extending Interfaces)

    5.接口继承(Extending Interfaces)和通话talk的功能.而Moto888更为高级,除了照相和通话功能以外,还有mp3的功能.接口继承到底有什么意义呢?马克-to-win:1)通过 ...

  6. idea 配置mapper.xml代码提示

    从代码跳转mapper文件的插件: 在mapper文件中添加dtd约束: 1.下载dtd约束文件 http://mybatis.org/dtd/mybatis-3-config.dtd   http: ...

  7. CCF201812-1小明上学

    题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿 ...

  8. 关于表达式&& 和 || 有多项的时候的取值

    && 表达式只有两项的时候,如果表达式为false, 返回为false 的那一个 ,为true的时候    返回最后一个值 ||  只有两项的时候,返回为true 的那一个;都为fal ...

  9. 单位ren vw vh 和 vm

    px: (像素)就是一张图片最小的一个点 em :参考物是父元素的font-size,具有继承的特点 rem: 参考物是HTML的font-size

  10. C语言---魔方阵

    魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...