混合配置中的拦截器:SimpleUrlHandlerMapping和带注释的控制器

时间:2013-06-05 03:12:37

标签: spring spring-mvc

我有一个“旧的”Spring网络项目,我尝试逐步升级,这意味着我需要让事情同时以旧的和新的方式工作。例如,我有一个拦截器,并以这种方式声明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,当然我添加了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;
    }
}

为什么我的拦截器的属性(因为实际上我有很多)不再被设置了?

谢谢!

修改: 所以我清理并从头开始重新启动它现在可以工作了...感谢所有“浪费”时间阅读和回答!我希望也许我的问题至少会帮助那些寻找这种配置的人; - )

1 个答案:

答案 0 :(得分:0)

您为BO提供的参考文献是错误的。

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

在参考文献中,您已经给出了BO类的完全限定名称。应该有BO类的bean名称。

尝试更改它。我认为这将解决您的问题。