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は other を使用できませんbeans。このクラスが呼び出されるたびに、null プロパティがあります。

このクラスは、正常に動作している他のクラスとまったく同じです。唯一の違いは、このクラスは として使用されlistener、他のクラスは使用されないことです。何故ですか?

4

1 に答える 1

1

これには単純な理由があります。豆が 2 つあるからです。1 つは Web コンテナー (を使用web.xml) によって作成され、もう 1 つは Spring (Bean 定義を使用) によって作成されました。Web コンテナーと Spring は、お互いについて何も知りません。

あなたがする必要があるのは、アプリケーションコンテキストを取得する通常のリスナーを作成することです

WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());

これにより、Bean を検索できるようになります。これで、フィルターが変更できる Bean を定義できるようになりました。

注: この Bean にrequestスコープを指定しないと、混乱が生じます。

于 2012-08-27T07:55:01.767 に答える