java – AnnotationConfigApplicationContext尚未刷新

我正在开发一个 spring MVC应用程序.当我尝试在我的控制器类中使用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的数量,豆类的类型将崩溃.由于上下文永远不会被破坏(直到应用程序崩溃并重新启动),您将遇到可能的内存问题,性能问题,奇怪的事务问题等.

一般的经验法则是永远不构造ApplicationContext的新实例,而是使用依赖注入.

如果您真的想要访问ApplicationContext,请在控制器中放置该类型的字段并将@Autowired放在其上.

@Controller
public class MyController {

    @Autowired
    private ApplicationContext ctx;

    ….

}

然后,您可以在方法中查找所需的bean.如果您将ApplicationContext用作bean的工厂,这可能很方便.如果你需要的所有豆子都是单身,那么最好只需要注入你需要的豆子.

@Controller
public class MyController {

    @Autowired
    private MappingFileGenerator mfg ;

    ….

}

现在Spring将注入MappingFileGenerator,它可以在你的方法中使用.无需创建ApplicationContext的新实例.

更多信息请参见Spring Reference Guide.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...