【发布时间】:2014-12-21 19:37:00
【问题描述】:
我是 Spring Framework 的新手,在执行以下代码时收到警告“资源泄漏:'context' 永远不会关闭”
package com.programmingtechie.examples;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
public class Main {
@SuppressWarnings("deprecation")
public static void main(String[] args){
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
User user = (User)factory.getBean("user");
System.out.println("This Text is using BeanFactory");
System.out.println("My Name is "+user.getName());
System.out.println("My Age is "+user.getAge());
System.out.println("My Height is "+user.getHeight());
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User contextUser = (User)context.getBean("user");
System.out.println("This Text is using ApplicationContext");
System.out.println("My Name is "+contextUser.getName());
System.out.println("My Age is "+contextUser.getAge());
System.out.println("My Height is "+contextUser.getHeight());
// ((ConfigurableApplicationContext) context).close();
}
}
我知道如果我取消注释 ((ConfigurableApplicationContext) context).close(); 行,警告就会得到解决。但我找到了另一种解决警告消息here 的方法,但我不知道这种行为的原因。以下代码如何解决资源泄漏警告?
package com.programmingtechie.examples;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
public class Main {
private static ApplicationContext context;
@SuppressWarnings("deprecation")
public static void main(String[] args){
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
User user = (User)factory.getBean("user");
System.out.println("This Text is using BeanFactory");
System.out.println("My Name is "+user.getName());
System.out.println("My Age is "+user.getAge());
System.out.println("My Height is "+user.getHeight());
context = new ClassPathXmlApplicationContext("beans.xml");
User contextUser = (User)context.getBean("user");
System.out.println("This Text is using ApplicationContext");
System.out.println("My Name is "+contextUser.getName());
System.out.println("My Age is "+contextUser.getAge());
System.out.println("My Height is "+contextUser.getHeight());
}
}
【问题讨论】:
标签: spring memory-leaks applicationcontext