java -eclipse-Resource leak:'appContext'永远不会关闭

时间:2014-06-29 04:14:45

标签: java xml eclipse spring applicationcontext

我在Eclipse中创建了一个小bean类。它在NetBeans中工作,但在Eclipse中它说

  

资源泄漏:' appContext'永远不会关闭。

我这样关闭appContext.close(); 但它没有用。

// class drawingapplication

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class drawingapplication {

    public static void main(String[] args) {
        ApplicationContext appContext = new ClassPathXmlApplicationContext("spring.xml");
        Triangle triangle =(Triangle) appContext.getBean("triangle");
        triangle.draw();    
    }
}

// class Triangle

package org.spring.javabeans;

public class Triangle {
    public void draw(){
        System.out.println("triangle drawan");
    }
}

// spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN""http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
    <bean id="triangle" class="org.spring.javabeans.Triangle"/>
</beans>

2 个答案:

答案 0 :(得分:1)

ClassPathXmlApplicationContextConfigurableApplicationContext的子类,这意味着它实现了Closable

ApplicationContext未展开Closeable,因此无法在Closable#close()类型的任何引用上调用ApplicationContext方法。

但是,Eclipse检测到您正在分配类型ClassPathXmlApplicationContext的值(需要关闭),并警告您应该关闭它,即使您无法通过引用类型你将它分配给变量。

您需要转换引用值或将其分配给实现Closeable的类型的变量。

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("spring.xml");

然后,您可以正常调用close()

appContext.close();

答案 1 :(得分:0)

package org.spring.javabeans ;

import  org.springframework.context.support.ClassPathXmlApplicationContext;

public class DrawingApplication {


public static void main(String[] args) {
    ClassPathXmlApplicationContext appContext= new ClassPathXmlApplicationContext("Spring.xml");
    Triangle triangle= (Triangle) appContext.getBean("triangle");
    appContext.close();
    triangle.draw();



}

}