被增強的處理器屬性

有時,從 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();