发表于: 2017-06-20 21:54:24

2 890


iDEA不知道怎么又抽风了。。。

之前页面可以显示之后,还有一个展示优秀学员和查询优秀学员的功能没实现。就是我注释掉的那些,今天恢复原来的样子像看看哪里出问题了。。结果所有的service自动注入

都有问题。。。

参考资料:http://blog.csdn.net/cz2272006/article/details/54837463

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的实例就行。

检查了一下:

 

 

配置文件是没有问题的

然后又检查了studentmapper.xml文件,里面是数据库操作语句,也没有问题。。

诡异的是,编译没有报错,但是运行的时候:

 

 

按照提示一个个排错,发现并没有什么问题。。。

百度到的另外一种方法是安装 mybatis plugin 插件。。。我先试一下吧,不行的话就只能重装IDEA了。。。

 

 



返回列表 返回列表
评论

    分享到