2010-07-06 19 views
2

這可能是一個相對直接的問題,我只是沒有正確搜索,但我試圖使用Spring IoC容器來配置我的servlet。我有一些額外的處理程序(這是私人數據成員),並希望在運行時進行配置。是否有可能做到這一點?使用Spring IoC和web.xml中定義的servlet

現在我有我的web.xml正確加載servlet,但問題是我不知道如何將這些實例連接到Spring IoC容器,或者將從IoC容器生成的實例連接到servlet容器。

在我的web.xml文件中,我設置了ContextLoaderListener

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

而且還配置了正確的位置爲豆方面

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/beans.xml 
    </param-value> 
</context-param> 

我也知道,beans.xml文件被解析是因爲當我輸入錯誤的東西時,我得到了一些例外。

想法?有一個更好的方法嗎?

回答

2

我認爲大多數人只是在使用Spring MVC框架。在這種情況下,這是一個Spring類,你只需實現「控制器」(而不是實際的servlet)。

也就是說,完全可以做到你正在尋找的東西。看看FrameworkServlet(你可以擴展)或DelegatingFilterPorxy(你可以用這個類作爲例子寫一個'DelegatingSevletProxy')。

+0

謝謝,我會研究一下。我在想從一開始就使用SpringMVC,而我自己的懶惰阻止了這一點。我會繼續前進,並且這次做對;-) – 2010-07-08 16:55:44

0

你應該把你的邏輯從servlet中移出來,這樣他們就可以獲得對Spring應用上下文的引用,從上下文實例化一個bean,將它傳遞給HTTP請求,會話,其他任何需要的東西告訴豆做這項工作。

考慮到你不能在servlet容器之外實例化一個servlet,所以它不能被單元測試。 IoC容器不能實例化它。它不會從IoC或DI中受益。

如果可以的話,使用Spring MVC;您可能需要將servlet中的邏輯移動到控制器類中。

否則,看看org.springframework.web.context.ContextLoaderListener;從那裏你可以看到Spring如何引導自己。

+0

德魯的建議看起來不錯;他關於FrameworkServlet和DelegatingFilterProxy的觀點可能比閱讀我提到的代碼更好。 – Ladlestein 2010-07-06 18:10:48

相關問題