写程序一直发现这么一个问题:
翻遍了csdn没有找到怎么回事,感觉该配置的都配置了,然后看到spring配置文件里有
翻译过来就是没有为该文件配置应用上下文,点后面的配置,问题解决了
后面想把spring配置文件设置为java文件,发现idea下面有一个spring的选项
点击spring选项
双击项目名称可以看见整个项目的spring配置
点击加号将spring配置放进来就好了
但是没配置运行是正常的,所以一直都没点后面的配置,就是不能使用自动注入
盲猜能正常运行是因为在代码中使用spring配置文件时加了路径,运行后能根据这些路径找配置文件,但是spring配置文件和springmvc文件没有整合成一起。
记录一下这个问题,虽然很小,但是希望不要有谁遇到这个问题和我一样浪费大把时间来查,浪费时间。。。
后面接着运行,发现还是无法注入,虽然在软件中是可以注入了,但是运行以后还是注入失败,报错如下
service层还是无法注入,后面经过查阅资料,发现spring加载要在web.xml文件中配置,我一直跟着视频学习,自己编写了一个监听器,发现这样没有成功载入配置文件,默认的载入配置文件为
<!--说明配置文件的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--默认的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
后来想用注解开发,不想要xml文件,查阅资料以后找到
<!--通过指定context参数,让Spring使用AnnotationConfigWebApplicationContext启动容器而非XmlWebApplicationContext
默认没配置时是使用XmlWebApplicationContext-->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<!--指定标注了@Configuration的类,多个可以用逗号分隔-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.librarysystem.config.springConfig</param-value>
</context-param>
<!--配置监听器-->
<!--监听器将根据上面的配置使用AnnotationConfigWebApplicationContext根据contextConfigLocation指定的配置类启动Spring容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
问题得到解决,至于为什么自己写的监听器不起效果,查看默认监听器发现
继承了ContextLoader类,并且通过
this.initWebApplicationContext(event.getServletContext());初始化了配置文件
可编写一个监听器继承这个类调用这个方法
发现成功运行,自定义监听器加载配置文件成功