Spring报错java.lang.IllegalStateException: BeanFactory not initialized or already closed -call 'refres

本文介绍了在使用Spring框架过程中常见的三个异常及其解决方法,包括找不到类定义错误、BeanFactory未初始化异常以及未能找到配置文件等问题。

在使用spring时,遇到几个异常:

第一个异常:

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
解决:

在buildpath中加入commons-logging-1.1.3.jar


第二个异常:

java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

解决:

错误的写法是:ApplicationContext ctx = new ClassPathXmlApplicationContext();

应修改为ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);

其中beans.xml是spring bean的配置文件


修改上一个异常之后,第三个异常:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does not exist

解决:

是因为beans.xml没有放在src目录下,所以没找到配置文件。






`java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext` 这个错误表明 `BeanFactory` 未初始化或已关闭,在通过 `ApplicationContext` 访问 Bean 之前需要调用 `refresh` 方法。以下是一些可能的解决办法: #### 检查配置文件路径 确保配置文件(如 `applicationContext.xml`)存在于类路径下,并且在 `web.xml` 中正确配置了加载路径。示例 `web.xml` 配置如下: ```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> ``` 若配置文件不存在或路径错误,可能会导致 `BeanFactory` 无法正确初始化 [^4][^5]。 #### 确保 `ApplicationContext` 已刷新 在访问 Bean 之前,确保 `ApplicationContext` 已经调用了 `refresh` 方法。例如: ```java import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); // 注册配置类 context.register(AppConfig.class); // 刷新上下文 context.refresh(); // 获取 Bean MyBean myBean = context.getBean(MyBean.class); // 使用 Bean myBean.doSomething(); // 关闭上下文 context.close(); } } ``` #### 检查异步任务调用 在 Spring MVC 框架项目中,若在调用异步任务时出现该错误,需要确保异步任务执行时 `ApplicationContext` 是可用的。可以考虑在异步任务中注入 `ApplicationContext` 并使用它来获取 Bean [^2]。 #### 检查容器生命周期 确保在 `ApplicationContext` 关闭后不会再尝试访问 Bean。在应用程序关闭时,要正确处理 `ApplicationContext` 的关闭操作,避免在关闭后继续使用它。
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值