0

私は「古い」Spring Web プロジェクトを徐々にアップグレードしようとしています。つまり、古い方法と新しい方法を同時に機能させる必要があります。たとえば、インターセプターがあり、SimpleUrlHandlerMapping は次のように宣言されています。

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="acessControlInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <props>
            <prop key="page1.do">page1</prop>
        </props>
    </property>
</bean>

<bean id="acessControlInterceptor" class="org.foo.AccessControlInterceptor">
    <property name="someBO" ref="org.foo.bo.ISomeBO"/>  
</bean>

コントローラーを @Controller および @RequestMapping("/page2.do") アノテーションと統合し始めました。つまり、SimpleUrlHandlerMapping に URL を追加しません。もちろん、mvc:annotation-driven と context:component-scan のものを追加しました。 . それは機能し、古いページと新しいページはうまくいきますが、インターセプターがそれらの新しいコントローラーに対して呼び出されないことに気付きました。だから私はそれを私の設定に追加しました:

<mvc:interceptors>
    <ref bean="acessControlInterceptor" />
</mvc:interceptors>

つまり、インターセプターが「呼び出された」ということです...しかし、プロパティ「someBO」は常にnullになっています! これがインターセプターです(簡略化):

public class AccessControlInterceptor extends HandlerInterceptorAdapter {

    private ISomeBO someBO;

    public boolean preHandle(HttpServletRequest pRequest, HttpServletResponse pResponse, Object handler) throws Exception {
        ...
        // throws a null pointer exception on someBO
    }

    public ISomeBO getSomeBO() {
        return someBO;
    }

    public void setSomeBO(ISomeBO pSomeBO) {
        someBO = pSomeBO;
    }
}

インターセプターの属性が (実際にはたくさんあるため) 設定されなくなったのはなぜですか?

ありがとう!

編集:だから私はクリーンアップしてゼロから再起動し、今では動作します...読んで回答する時間を「無駄にした」皆さんに感謝します! 私の質問が、少なくともこの種の設定を探している人の助けになることを願っています;-)

4

1 に答える 1

0

あなたが提供した BO のリファレンスは間違っています。

<property name="someBO" ref="org.foo.bo.ISomeBO"/>

参考までに、BO クラスの完全修飾名を指定しました。BO クラスの Bean 名があるはずです。

それを変えてみてください。それがあなたの問題を解決すると思います。

于 2013-06-05T03:29:27.900 に答える