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") 注释集成在一起,这意味着我没有将 url 添加到 SimpleUrlHandlerMapping,当然我添加了 mvc:annotation-driven 和 context:component-scan 的东西. 那行得通,新旧页面相处融洽,但我意识到那些新控制器不需要我的拦截器。所以我将它添加到我的配置中:

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

哪个有效,我的意思是拦截器被“调用”......但属性“someBO”现在总是为空!这是拦截器(简化):

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 回答