1. ホーム
  2. java

[解決済み] Spring AOPでメソッドの引数を取得する?

2023-06-07 14:39:44

質問

Spring AOPを使用しており、以下のような局面があります。

@Aspect
public class LoggingAspect {

    @Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
    public void logBefore(JoinPoint joinPoint) {

        System.out.println("logBefore() is running!");
        System.out.println("hijacked : " + joinPoint.getSignature().getName());
        System.out.println("******");
    }

}

上のアスペクトは、インターセプト addCustomer メソッドの実行を妨害します。 addCustomer メソッドは入力として文字列を受け取ります。 しかし、私は addCustomer メソッドの内部で logBefore メソッドを使用します。

というのは可能なのでしょうか?

どのように解決するのですか?

いくつかのオプションがあります。

まず JoinPoint#getArgs() を返すメソッドを使います。 Object[] を返し、アドバイスされたメソッドのすべての引数を含んでいます。あなたがそれらでやりたいことに応じて、いくつかのキャストを行う必要があるかもしれません。

第二に、あなたは args のようなポイントカット式があります。

// use '..' in the args expression if you have zero or more parameters at that point
@Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..)) && args(yourString,..)")

であれば、メソッドは次のように定義できます。

public void logBefore(JoinPoint joinPoint, String yourString)