30

アノテーションを使用して Spring MVC インターセプターを配線することは可能ですか?もしそうなら、誰かがその方法の例を教えてくれますか?

注釈を介してワイヤで、XML 構成でできる限り少ないことを指しています。たとえば、http://www.vaannila.com/spring/spring-interceptors.htmlで見つけたこの構成ファイルでは、

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:interceptors-ref="loggerInterceptor" />
<bean id="loggerInterceptor" class="com.vaannila.interceptor.LoggerInterceptor" />

そこでは、どのくらいわずかな設定で済むでしょうか? 行 2 で Bean を明示的に宣言する必要がなくなると思い@Autowiredますが、行 1 も注釈で取り除くことは可能でしょうか?

4

5 に答える 5

80

これを正確に検索しているときに、この質問に出くわしました。最後に、@EnableWebMVC を WebMvcConfigurerAdapter と組み合わせて使用​​すると、Spring 3.1 で機能することがわかりました。

簡単な例:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="webapp.base.package")
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor());
    }

}
于 2013-03-20T19:01:11.787 に答える
19

私の知る限り、Spring MVC インターセプターを XML なしで構成する方法はまったくありません。

mvcただし、 Spring 3.0.x の最新バージョン (Spring 3.0.0 ではありません!) では、名前空間がいくつか単純化されています。

<mvc:interceptors>
    <bean class="com.vaannila.interceptor.LoggerInterceptor" />
</mvc:interceptors>

以下も参照してください。

于 2010-12-08T16:15:34.463 に答える
0

spring-AOP については知りませんが、Spring 経由で AspectJ を使用している場合は、@Aspect、@Pointcut、@Advise などを使用できます...

Spring AOP でこれらのアノテーションを使用する方法に関する素晴らしい記事もあります: http://java-x.blogspot.com/2009/07/spring-aop-with-aspecj-annotations.html

于 2010-12-08T15:49:05.710 に答える
-2

Markus Kreusch'answers のように、このようにも機能します

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="webapp.base.package")
public class WebApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping RequestMappingHandlerMapping=  super.requestMappingHandlerMapping();
        Object[] interceptors = new Object[1];
        interceptors[0] = new RoleInterceptor();
        RequestMappingHandlerMapping.setInterceptors(interceptors);
        return RequestMappingHandlerMapping;
    }

}
于 2015-05-05T01:45:28.227 に答える