我有一个“旧的”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;
}
}
为什么我的拦截器的属性(因为实际上我有很多)不再被设置了?
谢谢!
修改: 所以我清理并从头开始重新启动它现在可以工作了...感谢所有“浪费”时间阅读和回答!我希望也许我的问题至少会帮助那些寻找这种配置的人; - )
答案 0 :(得分:0)
您为BO提供的参考文献是错误的。
<property name="someBO" ref="org.foo.bo.ISomeBO"/>
在参考文献中,您已经给出了BO类的完全限定名称。应该有BO类的bean名称。
尝试更改它。我认为这将解决您的问题。