zoukankan      html  css  js  c++  java
  • 【Spring】Service 注入失败,空指针

    service层的类都有用@Service标识,但报空指针,注入失败,很可能是因为springapplication配置和springmvc的配置文件配置错误,导致容器冲突了。

     

    springspringmvc整合后,项目会有2个容器,一个是spring容器,一个是springmvc容器

    spring容器是父容器,springmvc容器是spring容器的子容器。

    spring容器初始化后,springmvc再进行初始化,并将spring容器作为它的父容器。

    子容器能够访问父容器的bean,而反之不行。

     

    两个容器的关系大概就是上述文字所表达的。

     

    如果spring的配置文件application.xml

    <context:component-scanbase-package="com.test.*"/>

    此路径和

     

    springmvc配置文件中

     

    <context:component-scanbase-package="com.test.*"/>


    路径一致,或者是父容器初始化的路径包括了子容器。

    那么,当springmvc容器初始化时,如果发现有相同的类,会将新初始化的实例覆盖spring容器中已经存在的实例,这可能会导致注入失败,空指针的问题。

     

    假如我们的controller里面引用了service,并且spring的配置文件初始化时扫描了全部的实例包括springmvccontroller并初始化,接着,springmvc容器初始化时,就会将spring容器中的controller实例覆盖掉。这个时候就会出错了,新的controller实例中的service就会出现找不到实例的情况。

     

    所以解决方法是,2个容器扫描的包必须相互区分,互不干扰。spring容器扫描非controller的实例,而springmvc容器扫描controller的实例就行。

  • 相关阅读:
    将内容重定向到剪切板(clip.exe)
    加速数组操作(Array)
    错误信息输出,重定向到文件
    格式化数字字符串
    PowerShell常用的.Net 、COM对象(New-Object、Assembly)、加载程序集
    计算文件夹大小、拷贝文件显示进度
    草稿-Hyper-V
    右下角显示提示窗口(New-Object,COM)
    《TCP/IP详解卷一:协议》数据链路层(一)
    tcpdump抓包命令
  • 原文地址:https://www.cnblogs.com/jpfss/p/9328722.html
Copyright © 2011-2022 走看看