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

如题,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,配置完成之后,重新启动就可以了
在这里插入图片描述

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值