【问题标题】:Spring Integration - handlers vs interceptorsSpring Integration - 处理程序与拦截器
【发布时间】:2013-12-02 22:44:47
【问题描述】:

在 Spring Integration 中,处理程序和拦截器看起来基本上实现了相同的事情。甚至还有一些“受骗”的实现,例如 MessageTransformingChannelInterceptorMessageTransformingHandler,据我所知,它们提供了具有不同语义的相同功能。

是否有一个时间适合而不是另一个?如果这是一个偏好问题,那么我猜会有某种约定?

谢谢, 罗伊

【问题讨论】:

  • 处理程序和拦截器是不同的东西。有一个拦截器提供与现有处理程序大致相同的功能这一事实并不重要。处理程序是一个端点(如服务激活器、网关等),而拦截器用于将通用行为应用于通道(日志记录、安全性或有时转换)。

标签: spring spring-integration


【解决方案1】:

我的一般经验法则是谨慎使用拦截器;通常,仅用于“被动”的事情,如日志记录、窃听等。

有些用户喜欢在拦截器中做消息验证;特别是如果他们想对多个通道应用相同的验证,可能使用具有适当通道模式的全局拦截器。

转换拦截器是在框架的早期迭代(2008 年)中创建的,我们可能应该(至少)删除参考(在 XML 部分)中唯一提到它的地方。

【讨论】:

    【解决方案2】:

    Handler 的意思是处理特定事物的类
    而Handler是Controller的inclusive实现,Controller是exclusive实现

    在 Spring 中,我们有以下不同类型的 Handler 接口:

    • HandlerInterceptor :这个拦截器基本上类似于一个 Servlet 过滤器,在 Spring MVC 框架中,我们有类似于 javax.servlet.FilterHandlerInterceptor 接口,它有助于身份验证、日志记录和审计、加密等等。
    • HandlerMapping :此接口用于将 HTTP 客户端请求映射到处理程序,即控制器。 DispatcherServlet 使用可配置的处理程序映射将请求分派给处理程序。
    • HandlerAdapter :策略接口HandlerAdapter 负责调用一些HandlerMapping 选择的处理程序方法。
    • Spring AOP 充当方法拦截器。

    Interceptors 为服务器端和客户端共享一个公共 API。例如,如果您需要对客户端请求的实体主体进行编码,那么您可以实现一个拦截器来为您完成这项工作。

    猜你喜欢
    • 2018-10-20
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多