当前位置: 首页 > 面试题库 >

如何在Spring MVC 3.0中注册处理程序拦截器?

裴兴言
2023-03-14
问题内容

应该很容易:

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

但是这样就不会调用拦截器


问题答案:

默认情况下,Spring将注册BeanNameUrlHandlerMapping,和DefaultAnnotationHandlerMapping,而无需任何显式配置。

如果您定义自己的HandlerMappingbean,那么默认的bean将不会被注册,而您只会得到显式声明的bean。

到目前为止,一切都很好。

当您添加<mvc:annotation-driven/>到混合中时,问题就来了。这
声明了自己的DefaultAnnotationHandlerMapping,它取代了默认值。但是,如果您也声明自己的一个,那么最终您将声明两个。由于按照声明的顺序进行查询,因此通常意味着首先注册的<mvc:annotation- driven/>人,而您自己的人将被忽略。

如果DefaultAnnotationHandlerMappingregister by的<mvc:annotation- driven/>行为类似于默认行为,那就更好了,即,如果显式声明的行为优先,但是那不是他们编写的方式。

我当前的偏好是根本不使用<mvc:annotation- driven/>,这太混乱了,与其他配置选项混合使用时也太不可预测了。它实际上并没有做任何特别复杂的事情,显式添加它为您所做的工作并不困难或冗长,并且最终结果更易于理解。



 类似资料:
  • 拦截注册表 bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健

  • 问题内容: 我正在开发命令行节点模块,希望能够通过网站上的链接启动它。 我想注册一个自定义协议,以使链接具有以下格式:单击它们将启动节点包。 如果没有为此的节点API(我确定不会),那么有什么办法可以通过调用系统命令从node做到这一点? 它必须在Windows,Linux和MacOS上运行。 问题答案: 这是一个有趣的想法。我认为目前没有跨平台的node.js解决方案。我确实遇到了要求同一件事的

  • 我最近几天在玩Spring拦截器,想通过拦截器捕捉和处理特定的请求。我要做的是在每个请求被特定的控制器处理之前拦截它,检查请求是否包含特定的参数。如果是,做一些事情,然后将这些事情签名到映射请求的控制器。 最后,我设法做到了这一点,但当我使用不同的参数值一次执行多个请求时,只有来自上一个请求的参数值被分配给每个控制器处理程序,甚至每个控制器都应该有包含在请求中的参数。 示例(同时执行): http

  • Windsor 使用 Castle DynamicProxy 公开了丰富的 AOP 能力。 拦截器 拦截器是围绕方法的调用注入代码的手段。 使用 Fluent API 可以为指定组件指定拦截器: container.Register( Component.For<ICalcService>() .Interceptors(InterceptorReference.ForTy

  • 我试图执行一些适用于代码中所有的通用逻辑。我知道我可以编写一个来拦截快乐路径。但是,我想连接到异常处理生命周期中,以便在呈现错误响应之前执行一些常见的逻辑,比如日志记录。 在Spring Boot/Spring MVC中有这样做的方法吗?如果可能的话,我希望避免为此编写servlet过滤器。

  • 我使用的是Spring boot 2.2.9,我在获取401 HTTP错误的入口点时遇到问题,我正在尝试更改响应的行为,就像我们可以使用Spring错误处理程序(ResponseEntityExceptionHandler类)处理其他HTTP错误一样,谢谢