2008-12-17 75 views
2

我們有一個(非Web應用程序)Spring應用程序,它在我們的CruiseControl持續集成Linux框上運行測試時拋出NoSuchBeanDefinitionException異常。該測試在Eclipse中的Windows上運行良好。如何調試Spring NoSuchBeanDefinitionException

的拋出異常上的getBean()方法:

ApplicationContext context = new ClassPathXmlApplicationContext(CONTEXT_FILE); 

MyBean bean = (MyBean)context.getBean("myBean"); 

上下文文件相當大且複雜。上下文文件位於類路徑中,Spring正在查找它。我更喜歡它,如果Spring在嘗試加載上下文文件並構建依賴關係時會拋出異常,以便我們可以從哪裏開始。有沒有辦法強制Spring在創建上下文時拋出異常?

回答

3

已解決。 CONTEXT_FILE中的「myBean」的實例化發生在依賴於它的另一個bean之後。這確實不應該是一個問題,但我懷疑Linux機器上的解析器必須更嚴格。無論如何,改變定義的順序使它可以在Windows和Linux上運行。

+0

好的,這也是我的例外背後的原因。 Spring社區必須研究它。 – 2014-11-26 15:44:52

2

您確定在CONTEXT_FILE中有一個名爲「myBean」的bean嗎?你使用多個上下文文件嗎?你有沒有發現Spring的日誌記錄來驗證CONTEXT_FILE是否正確加載,而且,Spring從類路徑加載的文件是你認爲應該加載的文件?

我認爲你可能在爲你的問題尋找錯誤的解決方案 - 我從來沒有見過Spring拋出NoSuchBeanDefinitionException,除非你要求的bean沒有在上下文中定義,就這麼簡單。

1

我有同樣的問題。事實證明,這是一個微妙的類路徑問題。 特別是 - 我在linux上建立了classpath,這樣我的配置目錄包含我的build.xml文件,它出現在我的x-jar(外部jar)目錄之後 - 還有一些其他beans.xml從我的x-jar中拾取,正如日誌消息所說的,不包含所需的bean。如果beans.xml文件的完整路徑已被Spring錯誤消息記錄下來,它會有所幫助。

相關問題