被增强的处理器属性
有时,从 advice 中访问处理器属性会很有用。例如,大多数处理器实现了 NamedComponent
接口,让您可以访问组件名称。
可以通过 target
参数(当继承 AbstractRequestHandlerAdvice
时)或 invocation.getThis()
(当实现 org.aopalliance.intercept.MethodInterceptor
时)访问目标对象。
当整个处理器被增强时(例如当处理器不产生回复或 advice 实现了 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();