Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧珠工厂装卸 Spring何时可以优雅地卸载Spring容器(XMLBeanFactory) 当应用程序正在运行但BeanFactory的唯一处理程序超出范围时会发生什么情况 装载弹簧容器的理想方式是什么?做handler=newbeanfactory()是正确的方法吗_Java_Spring_Ioc Container - Fatal编程技术网

Java 弹簧珠工厂装卸 Spring何时可以优雅地卸载Spring容器(XMLBeanFactory) 当应用程序正在运行但BeanFactory的唯一处理程序超出范围时会发生什么情况 装载弹簧容器的理想方式是什么?做handler=newbeanfactory()是正确的方法吗

Java 弹簧珠工厂装卸 Spring何时可以优雅地卸载Spring容器(XMLBeanFactory) 当应用程序正在运行但BeanFactory的唯一处理程序超出范围时会发生什么情况 装载弹簧容器的理想方式是什么?做handler=newbeanfactory()是正确的方法吗,java,spring,ioc-container,Java,Spring,Ioc Container,更新: 当容器超出范围时,我们确实希望调用close()方法,从而释放所有保留的资源。但事实并非如此!我遇到了这样一个例子:我的spring容器超出了作用域,但内存仍然很满(OutOfMemory错误)。原因是我的Spring容器创建的SessionFactory对象从未被垃圾收集,因为它们是作为静态对象创建的。这意味着当容器超出范围时,从未调用close()->destroy()。让我相信弹簧本身存在泄漏问题。BeanFactory是在春天做事的古老方式。实例化Spring上下文的更现代的方法


更新:

当容器超出范围时,我们确实希望调用close()方法,从而释放所有保留的资源。但事实并非如此!我遇到了这样一个例子:我的spring容器超出了作用域,但内存仍然很满(OutOfMemory错误)。原因是我的Spring容器创建的SessionFactory对象从未被垃圾收集,因为它们是作为静态对象创建的。这意味着当容器超出范围时,从未调用
close()->destroy()
。让我相信弹簧本身存在泄漏问题。

BeanFactory是在春天做事的古老方式。实例化Spring上下文的更现代的方法是通过ApplicationContext接口。如需参考,请阅读

如果您打算在Web应用程序中使用Spring,请阅读


豆工厂是在春天做事的古老方式。实例化Spring上下文的更现代的方法是通过ApplicationContext接口。如需参考,请阅读

如果您打算在Web应用程序中使用Spring,请阅读

  • 这取决于您如何实例化它。对于一个webapp,这通常是在上下文关闭时完成的。在命令行上,必须专门关闭上下文(通过“AbstractApplicationContext”上的“close”方法)
  • 与其他超出范围的方法相同。不确定“close”方法是否属于终结器阶段。我希望终结器将触发销毁阶段
  • 正如其他人所说,不要直接使用BeanFactory。创建应用程序上下文。web应用程序最常用的方式是ContextLoaderListener,而命令行程序则是ClassPathXmlApplicationContext
  • //保留一个特定的类型,这样我们以后就可以调用“close”方法了 它//不是ApplicationContext接口本身的一部分。 ClasspathXmlApplicationContext上下文= 新的ClasspathXmlApplicationContext(新字符串[]{“applicationContext.xml})

    然后,稍后关闭它:

    context.close();
    
    对于网络应用程序:

    <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>
    
    
    上下文配置位置
    类路径:applicationContext.xml
    org.springframework.web.context.ContextLoaderListener
    
  • 这取决于您如何实例化它。对于webapp,这通常在关闭上下文时完成。在命令行上,您必须专门关闭上下文(通过“AbstractApplicationContext”上的“close”方法)
  • 与其他超出范围的方法相同。不确定“close”方法是否属于终结器阶段。我希望终结器将触发销毁阶段
  • 正如其他人所说,不要直接使用BeanFactory。创建应用程序上下文。web应用程序最常用的方式是ContextLoaderListener,而命令行程序则是ClassPathXmlApplicationContext
  • //保留一个特定的类型,这样我们以后就可以调用“close”方法了 它//不是ApplicationContext接口本身的一部分。 ClasspathXmlApplicationContext上下文= 新的ClasspathXmlApplicationContext(新字符串[]{“applicationContext.xml})

    然后,稍后关闭它:

    context.close();
    
    对于网络应用程序:

    <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>
    
    
    上下文配置位置
    类路径:applicationContext.xml
    org.springframework.web.context.ContextLoaderListener
    
    谢谢Matt.(1)和(3)非常有帮助。对于(2),我有一些真正的担忧。请查看更新。如果close()不是终结器的一部分,那么当web应用上下文关闭或JVM关闭时,谁会触发此方法?谢谢Matt.(1)和(3)非常有帮助。对于(2),我有一些真正的顾虑。请查看更新。如果关闭()不是终结器的一部分,那么在web应用程序上下文关闭或JVM关闭时谁触发此方法?BeanFactory并不比ApplicationContext更古老。它们几乎是在同一时间创建的。ApplicationContext是通用BeanFactory的丰富版本,包含消息传递、事件、层次结构和生命周期cles等BeanFactory并不比ApplicationContext更古老。它们几乎是在同一时间创建的。ApplicationContext是通用BeanFactory的丰富版本,包含消息传递、事件、层次结构、生命周期等。