2010-04-05 3 views
10

Ich versuche, einen Interceptor mithilfe einer annotierungsgesteuerten Controller-Konfiguration zu registrieren. Soweit ich das beurteilen kann, habe ich alles richtig gemacht, aber wenn ich versuche, den Abfangjäger zu testen, passiert nichts. Nach einem Blick in den Protokollen fand ich folgendes:Spring lehnt Bean-Namen ab, keine URL-Pfade angegeben

2010-04-04 20:06:18,231 DEBUG [main] support.AbstractAutowireCapableBeanFactory (AbstractAutowireCapableBeanFactory.java:452) - Finished creating instance of bean  'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0' 
2010-04-04 20:06:18,515 DEBUG [main] handler.AbstractDetectingUrlHandlerMapping (AbstractDetectingUrlHandlerMapping.java:86) - Rejected bean name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0': no URL paths identified 
2010-04-04 20:06:19,109 DEBUG [main] support.AbstractBeanFactory (AbstractBeanFactory.java:241) - Returning cached instance of singleton bean 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0' 

Blick auf die zweite Zeile dieses Log-Schnipsel. Sperrt Spring die Bean DefaultAnnotationHandlerMapping? Und wenn ja, könnte das das Problem sein, wenn mein Abfangjäger nicht funktioniert?

Hier ist mein Anwendungskontext:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" 
default-autowire="byName"> 

<!-- Configures the @Controller programming model --> 
<mvc:annotation-driven /> 

<!-- Scan for annotations... --> 
<context:component-scan base-package=" 
    com.splash.web.controller, com.splash.web.service, com.splash.web.authentication"/> 

<bean id="authorizedUserInterceptor" class="com.splash.web.handler.AuthorizedUserInterceptor"/> 

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="interceptors"> 
     <list> 
      <ref bean="authorizedUserInterceptor"/> 
     </list> 
    </property> 
</bean> 

Hier ist mein Interceptor:

package com.splash.web.handler; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 

    public class AuthorizedUserInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler) throws Exception { 

     log.debug(">>> Operation intercepted...");   

     return true; 
    }  
} 

jemand tut etwas falsch mit diesem sehen? Was bedeutet der Fehler, den ich oben erwähnt habe, und könnte er einen Einfluss darauf haben, dass der Interceptor nicht aufgerufen wird? Vielen Dank!

+0

Für mich ist es tritt auf, wenn ich Compiler Java geändert 1,7-1,6. –

Antwort

16

Was Sie sehen, ist ein Konflikt zwischen <mvc:annotation-driven /> und der expliziten Bean-Definition von DefaultAnnotationHandlerMapping.

Wenn Sie <mvc:annotation-driven /> hinzufügen, deklariert Spring seinen eigenen DefaultAnnotationHandlerMapping, und weil es vor Ihrem eigenen erscheint, erhält es Priorität. Ihr Interceptor ist bei Ihrer DefaultAnnotationHandlerMapping registriert, wird aber nie wirklich aufgerufen.

Versuchen Sie, <mvc:annotation-driven /> zu entfernen, und versuchen Sie es erneut.

+0

Dank kommentieren funktioniert. Also ist das Hinzufügen meiner eigenen DefaultAnnotationHandlerMapping genauso wie dieses Tag tut? Ich denke, ich muss etwas mehr darüber nachlesen. – richever

+1

@richever: '' ist weitgehend undokumentiert (eine Auslassung, die hoffentlich für die 3.0.2-Dokumente behoben wird), aber im Wesentlichen registriert es eine Reihe von Handler-Zuordnungen und Adapter für Sie, spart Ihnen die Unordnung in 90% der Fälle - aber nicht in Ihrem Fall :) – skaffman