已配置处理器属性

有时,从 advice 中访问 handler 属性非常有用。例如,大多数 handler 都实现了 NamedComponent 接口,允许您访问组件名称。

目标对象可以通过 target 参数(当继承 AbstractRequestHandlerAdvice 时)或 invocation.getThis()(当实现 org.aopalliance.intercept.MethodInterceptor 时)访问。

当整个 handler 都被 advice 增强时(例如,当 handler 不产生回复或 advice 实现 HandleMessageAdvice 时),您可以将目标对象强制转换为接口,例如 NamedComponent,如下例所示。

String componentName = ((NamedComponent) target).getComponentName();

当您直接实现 MethodInterceptor 时,您可以按如下方式强制转换目标对象。

String componentName = ((NamedComponent) invocation.getThis()).getComponentName();

当只有 handleRequestMessage() 方法被 advice 增强时(在产生回复的 handler 中),您需要访问完整的 handler,它是一个 AbstractReplyProducingMessageHandler。以下示例展示了如何操作。

AbstractReplyProducingMessageHandler handler =
    ((AbstractReplyProducingMessageHandler.RequestHandler) target).getAdvisedHandler();

String componentName = handler.getComponentName();