2011-02-17 101 views
1

我正在使用Spring實現一個Web應用程序。我使用Spring的ContextLoaderListener來加載我的應用程序上下文,並使用Spring的DispatcherServlet從{name} -servlet.xml加載相關的bean,它們引用主應用程序上下文中的bean。我希望能夠在容器外部集成測試這些Spring配置,以在部署到Tomcat之前驗證所有部件是否正確連接。但是,我的應用程序在容器中運行時需要一些預定的後臺處理。在一個普通的HttpServlet中,我只需實現init()和destroy()。我讀過的所有建議都建議使用InitializingBean進行這種初始化。然而,如果我使用InitializingBean,afterPropertiesSet()被調用,無論我是在容器內部還是在集成測試中 - 並且在容器外部,我都無法訪問後臺任務需要的資源。有沒有更好的方法來執行我通常在init()和destroy()中執行的任務,以便它們只能在部署爲webapp時運行?在Spring Web應用程序中實現servlet生命週期方法?

+0

我想也許我可以在控制器的InitializingBean afterPropertiesSet()方法內使用getServletContext()來確定我是否作爲一個servlet運行。這會在容器外引發異常,所以我可以使初始化步驟有條件。它的工作原理,但它似乎是一個黑客。 – 2011-02-17 19:27:04

回答

1

您是否考慮過使用測試彈簧配置文件來覆蓋實現後臺進程的bean?

通過這種方式,除了重寫的bean之外,Spring配置中的其他所有東西都能正常工作。

+0

我很喜歡這個想法。它與我正在做的其他事情非常吻合,包括初始化Bean以將測試數據加載到數據庫中,並且它使代碼中的測試細節保持不變。謝謝! – 2011-02-22 18:28:55

相關問題