2012-08-27 83 views
0

我有一個監聽器類中web.xml這樣的:篩選器或偵聽器無法使用彈簧豆嗎?

<listener> 
    <listener-class>com.datx.monitoring.model.MonitoringHttpSessionListener</listener-class> 
</listener> 

而對於這個班,我已經定義了一個bean這樣的:

<bean id="monitoringHttpSessionListener" 
    class="com.datx.monitoring.model.MonitoringHttpSessionListener" autowire="byName"/> 

但這bean不能使用其他beans。每次調用此類時,都會有空屬性

該課程與其他工作正常的課程完全相同。唯一的區別是,這個類被用作listener,另一個不是。這是爲什麼?

+0

我認真地想,這個類是'new'ed,並且它根本不涉及'spring'!如果確認,我可能需要修改問題。 –

+1

http://www.techper.net/2011/03/05/springified-servlets-listeners-and-filters/ – nobeh

回答

1

有一個簡單的原因:有兩個豆子。一個是由您的Web容器(使用web.xml)創建的,另一個是由Spring(使用您的bean定義)創建的。 Web容器和Spring對彼此一無所知。

你需要做的是建立一個正常的聽衆而它與

WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()); 

此應用程序上下文可以讓你仰視豆。現在你可以定義一個過濾器可以修改的bean。

注意:你會想給這個豆的範圍request範圍,否則會有混亂。

+0

提供了每種情況的一個示例感謝Aaron。 (稍微修改一下你的答案),這正是我所需要的。 –