您的位置:首页 > 编程语言 > Java开发

Spring如果遇到这个问题:java.lang.IllegalStateException: BeanFactory not initialized or already closed - call

2019-02-14 11:13 260 查看
版权声明:北极猴 https://blog.csdn.net/weixin_39903133/article/details/87258360

如题,spring如果遇到
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call ‘refresh’ before accessing beans via the ApplicationContext
这个问题的话,不要慌

这个错误信息说明的是BeanFactory 没有初始化或者已经关闭了,以后在遇到这样的问题的话,大家应该毫不犹豫的想到是配置文件的问题

我先把解决的方法直接写出来,然后后面做详细的方法解析,因为有的老哥懒得看解析,他只是过来找答案,找解决方法。 如下:
你只需在你的web.xml中配置下面这样一段代码即可。

<!--配置读取spring文件的路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
//这里的applicationConText.xml是你spring配置文件的名字
<param-value>classpath:applicationConText.xml</param-value>
</context-param>

接下来是解析
那我们把错误信息往上翻,看看配置文件到底什么问题,这时你会发现

这里的意思是,他在创建spring工厂的时候要读取配置文件,他读取的这个配置文件没找到,他去哪里找了呢?他去 [/WEB-INF/applicationContext.xml] 这里找了,但是我们并没有把配置文件放到这里,我们放的位置应该是:

*应该是这个位置。

那我们往他的底层戳一戳,看下他的源码*



在这里,我们可以清楚的看到,它读取配置文件的默认位置是
[/WEB-INF/applicationContext.xml]

他的参数呢是这个:“contextConfigLocation” ,所以我们要去配置一下这个,他的参数是context-param(即上下文参数),可以在WEB-INF下直接配置的,那我们就去配置一下

所以此时有两个解决方案
第一个:在WEB-INF下重新配置读取spring文件的路径

添加这段代码即可

<!--配置读取spring文件的路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationConText.xml</param-value>
</context-param>

有的朋友在这里可能会迷惑,为什么这里路径要用classpath呢?这个applicationConText.xml不是在resources下么? 其实是因为我们的java程序最终打成jar包的时候,.class文件和配置文件都放到了classes中,所以要指向这个位置。

给大家教一个小技巧,以后遇到配置的属性,或者方法的后缀是Location或Locations的,那么全部都应该在classpath下,一般都是放到classpath下。

ok,配置完成之后,重新启动就可以了

如果有什么问题,欢迎留言探讨。感谢免费评分…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐