handler = new BeanFactory()
正确的方法吗?
更新:
当容器超出范围时,我们确实会期望调用close()方法,这将反过来释放所有持有的资源。但这不会发生!我遇到过一个案例,我的弹簧容器超出了范围,但内存仍然满了(OutOfMemory错误)。原因是我的Spring容器创建的SessionFactory对象从来没有被收集垃圾,因为它们是作为静态创建的。这意味着当容器超出范围时,永远不会调用close()->destroy()
。让我相信Spring本身存在泄漏问题。
答案 0 :(得分:3)
//保留一个特定的类型,因此我们可以在以后调用“close”方法 它不是ApplicationContext接口本身的一部分。 ClasspathXmlApplicationContext context = new classpathXmlApplicationContext(new String [] {“applicationContext.xml});
然后你关闭它:
context.close();
对于webapps:
<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>
答案 1 :(得分:0)
BeanFactory是在Spring中做事的古老方式。实例化Spring上下文的更现代的方法是通过ApplicationContext接口。供参考,请阅读
如果您打算在Web应用程序中使用Spring,请阅读
4.14.4 Convenient ApplicationContext instantiation for web applications