2013-06-05 112 views
0

我有一个“旧”的Spring Web项目,我尝试逐步升级,这意味着我需要在同一时间使用新旧方法。比如我有一个拦截器和SimpleUrlHandlerMapping建立这样声明:混合配置中的拦截器: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

只需确认删除'mvc:interceptors'设置,然后再试一次,看看它是否已设置 –

回答

0

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

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

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

试着改变它。我认为这将解决您的问题。

+0

我没有放置整个配置; - )bean“org.foo.bo.ISomeBO”在另一个配置文件中声明。无论如何,它曾经工作... –