8

多くのメソッドを持つサービス インターフェイスがあり、そのすべてが Request オブジェクトを受け取り、Response オブジェクトを返します。すべてのリクエスト オブジェクトには共通の祖先があり、すべての応答オブジェクトには異なる共通の祖先 (成功フラグとメッセージ フィールドがあります) があります。

ここで、アクセス許可などをチェックし、サービス呼び出しを実行し、何かが失敗した場合に失敗コードを含む Response オブジェクトを返すというアラウンド アスペクトが必要です。問題は、作成する Response オブジェクトのタイプを知る必要があることです。戻り値の型にアクセスできるポイントカット式はありますか? もしかして、こういうこと?

@Around(value = "execution(public *"
    + " com.mycompany.MyService+.*(..))"
    + " && args(request)"
    + " && returning( returnType)" // something like this would be nice

, argNames = "request,returnType")
public Object handleServiceCall(final ProceedingJoinPoint pjp,
    final Request request,
    final Class<? extends Response> returnType){ ... }
4

2 に答える 2

6

Javadoc forはメソッドJoinPointについて言及しておりgetSignature()、その戻り値の型には、キャストを試みることができるSignatureサブインターフェイスがあり、これには methodがあり、これが探しているものである可能性があります。MethodSignaturegetReturnType()

于 2010-06-23T09:57:18.863 に答える
0

aroundアドバイスメソッド(あなたの場合はhandleServiceCall())内でそのチェックを行うことができます

Object actuals = pjp.proceed();
if(actuals instanceof MyResponse){
//TO:DO: Your code here
}
于 2010-06-23T09:15:01.327 に答える