Я создаю небольшой компонент bean-класса в Eclipse. Он работает в 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>
ClassPaспасибоmlApplicationContext
является подклассом ConfigurableApplicationContext
что означает, что он реализует Closable
.
ApplicationContext
не распространяется на Closeable
, поэтому метод Closable#close()
не может быть вызван по какой-либо ссылке типа ApplicationContext
.
Однако Eclipse обнаруживает, что вы назначаете значение типа ClassPaспасибоmlApplicationContext
(которое должно быть закрыто) и предупреждает, что вы должны закрыть его, даже если вы не можете использовать ссылочный тип переменной, которую вы назначаете.
Вам нужно либо присвоить ссылочное значение, либо присвоить его переменной типа, реализующего Closeable
.
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("spring.xml");
Затем вы можете вызвать close()
обычно
appContext.close();
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();
}
}