2017-07-06 155 views
2

我是springbeans的新手,我在編譯tutorialscom上的「HelloSpring」代碼時遇到了一些錯誤。整個代碼只有一個主類的警告:關於解決資源泄漏問題

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的警告我「資源泄漏:‘語境’是永遠不會關閉」,但對於的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 

順便說一句我的Java版本是最新的1.80,IDK的,如果這個問題。 謝謝!

回答

2
  1. 如果你出發,找到一個更好的比教程點。有很多教程是由Spring傢伙編寫的,下面是他們的getting started
  2. 沒有人再使用XML配置,除非你97歲並且註解不了。使用註釋。
  3. 您不需要try-finally即可關閉ApplicationContext。 2011年在Java 7中引入了Try-with-resources,與此同時,人們停止在Spring配置中使用XML。

我會建議你使用Spring Boot並讓自己的生活更輕鬆,但Boot會在很多事情下做很多事情,你可能想學習一些很難的方法。

+0

好的,謝謝!我會查看你發給我的鏈接 – GitGud

1

將commons-logging.jar添加到項目類路徑中。這將修復錯誤。

關於通過月食的警告,你可以把try塊中的代碼,並關閉在最後連接塊,這將解決警告

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

     } 
+0

謝謝!添加.jar允許程序運行,但finally塊中的「上下文」有錯誤「上下文無法解析爲變量」。我需要添加一些其他庫嗎? – GitGud

+0

更新了代碼 – RSingh

1

修復您的錯誤:將commons-logging.jar文件添加到您的項目類路徑中。這將解決這個問題。

修復資源泄漏:您必須註冊關閉掛鉤。你可以在這裏找到更多細節。

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

希望這有助於:)

+0

謝謝!這真的很有幫助! – GitGud

+0

他沒有要求Spring Boot。他剛剛開始使用Spring,這就是爲什麼我不推薦在我的答案中使用Boot。 –

+0

這裏沒有參數:)只是提供更多的信息,可能在未來有所幫助。 –