我有一个“旧”的 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;
}
}
为什么现在不再设置我的拦截器的属性(因为实际上我有很多)?
谢谢!
编辑:所以我清理并从头开始重新启动,现在它可以工作了......感谢所有“浪费”时间阅读和回答的人!我希望也许我的问题至少可以帮助寻找这种配置的人;-)