问题BeanFactory not initialized or already closed - call 'refresh' before access

本文探讨了Spring MVC框架中由于相同名称控制器导致的Bean实例化失败问题,并提供了避免此问题的方法,即通过为@Controller注解指定不同的value属性。
部署运行你感兴趣的模型镜像

在网上查找很久,很多人说是因为

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

时,没有指定配置文件,Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件的,但是呢,你又没有指定,所以出现了这个错误。

这就是错误的原因,在括号写上配置文件名就行了。

正确写法:ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

 

但是,我并没有写这个东西,我使用的是springmvc框架:后来发现问题在于在不同的包结构下存在相同名字的controller。导致Spring实例化BeanFactory失败。如果@Controller里面的value你没有设置的话,spring会按照你的class名称去实例化属于它的bean,当出现两个相同的class名称的时候就会报错。所以我们写程序的时候一定要避免相同名称的controller。当然如果你一定要若干个相同名称的controller。那么在注解@Controller加上不同的value属性。如:@Controller(value="xxxController") 、@Controller(value="xxxController")……

请注意:
@Controller(value="xxxController"): 命名规则一定要规范。
我理解的命名规则:
见名知意,简单明了;名字长没关系,不要为了缩写而缩写

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

`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` 的关闭操作,避免在关闭后继续使用它。
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值