关于解决资源泄漏问题

时间:2017-07-06 02:53:13

标签: java spring

我是Spring框架的新手,我在编译" HelloSpring"时遇到了一些错误。 tutorialscom上的代码。在整个代码中,主类中只有一个警告:

package com.tutorialspoint;

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

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        HelloWorld  HW = (HelloWorld)context.getBean("Hello Spring");
        HW.getMsg();
    }
}
Eclipse警告我"资源泄漏:' context'永远不会关闭",但对于ApplicationContext类我不知道如何关闭它。任何人都可以帮我吗?

错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:164)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:89)
    at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:58)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:61)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:136)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.tutorialspoint.MainApp.main(MainApp.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more
BTW我的java版本是最新的1.80,如果这很重要的话。 谢谢!

3 个答案:

答案 0 :(得分:2)

将commons-logging.jar添加到项目类路径中。这将解决错误。

关于eclipse的警告,你可以把代码放在try块中并关闭finally块中的连接,它会修复警告

ApplicationContext context = null;
try{
    context = new ClassPathXmlApplicationContext("Beans.xml");
      }
finally{
  ((ClassPathXmlApplicationContext) context).close();

       }

答案 1 :(得分:2)

  1. 如果您要开始,请找一些比tutorialspoint更好的东西。有很多教程是由Spring工作人员编写的,这里是getting started
  2. 没有人再使用XML配置,除非你已经97岁并且反对注释了。使用注释。
  3. 您不需要try-finally来关闭ApplicationContextTry-with-resources于2011年在Java 7中引入,大约在同一时间人们停止使用XML进行Spring配置。
  4. 我建议你使用Spring Boot并让自己的生活变得更轻松,但Boot会做很多事情,你可能想要学习很多方法。

答案 2 :(得分:1)

修复错误:将commons-logging.jar文件添加到项目类路径中。这将解决问题。

修复资源泄漏:您必须注册关闭挂钩。您可以在此处找到更多详细信息。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-spring-application.html

希望这会有所帮助:)