zoukankan      html  css  js  c++  java
  • 由一次报错引发的对于Spring创建对象的理解

    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~

          

  • 相关阅读:
    ueditor内容带格式回显(html字符串回显)
    thymleaf th:text="|第${user.courseSort}课|" 对于不知道的真的是解渴了
    Thymleaf 从某处(不包含某处)开始截取字符串到末尾
    layUI 实现自定义弹窗
    layUI实现可选项 弹框
    layUI弹出框提示
    点击编辑table变为可编辑状态
    POI导出数据以Excel的方式录入,下载
    基于BootStrap的initupload()实现Excel上传和获取excel中的数据
    下载导入模板
  • 原文地址:https://www.cnblogs.com/miaoww/p/9255067.html
Copyright © 2011-2022 走看看