org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entUserService':
Unsatisfied dependency expressed through field 'entMessageDao';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.hyb.common.dal.dao.ent.EntMessageDao' available: expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)

以上是一次报错记录,看报错内容也不难发现报错原因是找不到相应的bean。

背景:在一个service中调用dao调不到。

解决办法:是在一个dubbo项目中创建新的service,将原本的service调用新的service。解决错误。

分析报错原因如下:

1.找不到对应的bean。在Spring中使用的bean是从@Autowire自动装配的,而@Autowire能装配的bean是Spring自动给我们创建出来的。而现在找不到这个bean,也就是说,我们再@Autowire是没有将对象引入进来,换句话说就是Spring并没有帮我们创建这个对象。

开始思考:为什么Spring没有创建出这个bean,Spring是怎么知道我们需要哪些对象,然后帮我们创建的?

    注解是一种方式,@Controller、@Service、@Response能将我们的bean进行分类。此项目的数据层是SpringData实现的。特意去看项目中的dao并没有看到注解,如下:

只是继承了Jpa的一个接口,点进接口,如下:

也并没有看到相应的配置,能够表示出来在此项目中的数据层是通过什么被Spring创建出来的。所以我之前认为的通过注解或者是继承的Jpa接口使Spring知道需要创建出来的bean这个想法是不对的。

  那重新开始思考,Spring是怎么知道需要创建出哪些对象的?既然我最后是在dubbo的项目中创建了新的Service解决的问题,那我就去看了dubbo项目中的配置。看到如下的配置:

basePackages后面所指定的路径,正是我最终想要引入的dao对象。所以也就是说Spring创建对象,就是通过上面的配置,对于我们指定的路径进行创建。

2.那么,是不是就是可以认为。当时我在service所在的项目配置中加上这个路径,就可以扫描到所需要的bean。

然后从pom文件配置的信息可以看到。dao对应的实体类所在的数据库为hyb-dev,而 当前的service所在的项目绑定的数据库为hyb-dev-stuuser。访问是无法跨库访问的。

那么如果我们这么去配置了,所得到的结果也就是在hyb-dev-stuuser这个数据库中创建出了一个表,却无法得到我们想要的数据。这也说明了,我们在项目中写JavaBean时,只能指定表名和属性名等信息,而这个表具体在哪个数据库,是在表所在的项目中整体去配置的。

以上这个问题算是暂时的结束了。

3.那么是不是也就是说明当service直接去调用dao时,首先要看配置中是否有能够扫描到dao所在的项目的路径(这样Spring才能去帮我们去创建对象)。其次要看service所在项目绑定的数据库与dao所在项目绑定的数据库是是不是一样的。

那么在其他的web项目 中的service是不是也可以?

就酱。问题结束。over~

      

由一次报错引发的对于Spring创建对象的理解的更多相关文章

  1. 单点登录(十一)-----遇到问题-----cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema na

    cas启用mongodb验证方式报错--Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.sp ...

  2. 由ASP.NET Core WebApi添加Swagger报错引发的探究

    缘起 在使用ASP.NET Core进行WebApi项目开发的时候,相信很多人都会使用Swagger作为接口文档呈现工具.相信大家也用过或者了解过Swagger,这里咱们就不过多的介绍了.本篇文章记录 ...

  3. IntelliJ Idea中一个编译报错引发的

    package verify; public class Verifier { private String name; public Verifier() { this.name = getClas ...

  4. struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1

    好久没有搞struts2,今天配置strut2.2.1,启动时遇到个小问题.记录下. tomcat启动报错: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  5. 从async await 报错Unexpected identifier 谈谈对上下文的理解

    原文首发地址: 先简单介绍下async await: async/await是ES6推出的异步处理方案,目的也很明确:更好的实现异步编程.   详细见阮大神 ES6入门 现在说说实践中遇到的问题:使用 ...

  6. 打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace

    MAVEN项目,在IDEA中运行正常,但是把它打成jar包后再运行就会出现异常:   Exception in thread "main" org.springframework. ...

  7. Myeclipse报错:“Versions of Spring facet could not be detected”的解决方法

    解决方法如下: VERSION OF SPRING FACET COULD NOT BE DETECTED. The migration process needs to detect the cor ...

  8. 导入maven的java web项目运行报错找不到Spring监听器

    本地成功运行的一个maven项目,在另一台机器复制下来并导入,运行时报错: java.lang.ClassNotFoundException: org.springframework.web.cont ...

  9. MySQL 启动服务报错解决方案

    标签:ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid) 概述 文章 ...

随机推荐

  1. java 写一个类,实现对象数的计算

    但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题.面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计 ...

  2. 使用 mysqladmin debug 查看死锁信息

    使用 mysqladmin debug 查看死锁信息 mysqladmin -S /mysql/data/mysql.sock debug 然后在error日志中,会看到: 11 lock struc ...

  3. 为什么notify(), wait()等函数定义在Object中,而不是Thread中

    Object中的wait(), notify()等函数,和synchronized一样,会对“对象的同步锁”进行操作. wait()会使“当前线程”等待,因为线程进入等待状态,所以线程应该释放它锁持有 ...

  4. 微信小程序wepy开发循环wx:for需要注意

    微信小程序wepy开发循环wx:for需要注意 item index值必须在wx:for之后使用 <view wx:for="{{tablist}}" class=" ...

  5. 【论文笔记】CBAM: Convolutional Block Attention Module

    CBAM: Convolutional Block Attention Module 2018-09-14 21:52:42 Paper:http://openaccess.thecvf.com/co ...

  6. Learning-MySQL【4】:表的操作管理和 MySQL 的约束控制

    一.表的操作 1.表的基本概念 数据库与表之间的关系:数据库是由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构. 表由列和行组成,列是表数据的描述,行是表数据的实例. 表 ...

  7. gets() 与 scanf() 的小尴尬

    gets() 与 scanf() 函数相处呢有点小尴尬的,就是 gets() 在 scanf() 后边就爱捣乱.为什么呢,先了解它们两者之间的异同: 同: 都是可以接受连续的字符数据 并在字符结束后自 ...

  8. Asp.net MVC5 学习笔记

    控制器(controller)主要负责响应用户的输入,并且在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理,以及对相关视图(View)输出数据的 ...

  9. zabbix-3.4.14源码安装

    此次介绍一下,zabbix的源码安装,因为zabbix的依赖很多,所以源码安装有很多依赖需要安装 首先,下载zabbix源码包 wget https://nchc.dl.sourceforge.net ...

  10. 安装activemq和java代码实现生产和消费

    Apache Active MQ的官网 http://activemq.apache.org/ 下载地址: 国外的网站,网速不好的时候,真的下不下来 http://activemq.apache.or ...