被通知处理程序的属性

有时,在通知中访问处理程序属性很有用。例如,大多数处理程序实现 NamedComponent 以便您可以访问组件名称。

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

当整个处理程序被通知时(例如,当处理程序不产生回复或通知实现 HandleMessageAdvice 时),您可以将目标对象转换为一个接口,例如 NamedComponent,如以下示例所示:

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

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

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

当只有 handleRequestMessage() 方法被通知时(在产生回复的处理程序中),您需要访问完整的处理程序,它是一个 AbstractReplyProducingMessageHandler。以下示例展示了如何实现:

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

String componentName = handler.getComponentName();