gpt4 book ai didi

java - AnnotationConfigApplicationContext 还没有刷新

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:26 26 4
gpt4 key购买 nike

我正在开发一个 spring MVC 应用程序。当我尝试在我的 Controller 类中使用 AnnotationConfigApplicationContext 时,出现以下错误。我不知道这句话的确切含义。

@RequestMapping(value = "/generate", method = RequestMethod.POST)
public ModelAndView generateMappingFile(@ModelAttribute Mapping mapping)
{
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
MappingFileGenerator mfg = ctx.getBean(MappingFileGenerator.class);
}

错误信息 -->

java.lang.IllegalStateException:org.springframework.context.annotation.AnnotationConfigApplicationContext@116b3c0 has not been refreshed yet

有人可以向我解释这里出了什么问题吗?我正在使用 Spring 4.0.1.. 我是 spring mvc 的新手。

最佳答案

当您创建 ApplicationContext 的新实例(无论是哪种类型)时,您基本上是在为该 ApplicationContext 中配置的每个 bean 创建新实例。第一次很好,第二次可能会起作用,并且根据 bean 的数量,bean 的类型在那之后会崩溃。由于上下文永远不会被破坏(直到应用程序崩溃并重新启动),您将遇到可能的内存问题、性能问题、奇怪的事务问题等。

一般的经验法则是从不构造ApplicationContext 的新实例,而是使用依赖注入(inject)。

如果你真的想访问 ApplicationContext,请在你的 Controller 中放置一个该类型的字段,并在其上放置 @Autowired

@Controller
public class MyController {

@Autowired
private ApplicationContext ctx;

….

}

然后您可以在方法中查找所需的 bean。如果您使用 ApplicationContext 作为 bean 的工厂,这会很方便。如果您需要的所有 bean 都是单例,那么最好简单地注入(inject)您需要的 bean。

@Controller
public class MyController {

@Autowired
private MappingFileGenerator mfg ;

….

}

现在 Spring 将注入(inject) MappingFileGenerator 并且它可以在您的方法中使用。无需创建 ApplicationContext 的新实例。

更多信息在 Spring Reference Guide 中.

关于java - AnnotationConfigApplicationContext 还没有刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25842512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com