2016-05-20 6 views
0

同じ戻り値の型を持つ同じクラスに2つのパブリックメソッドがありますが、引数が異なるだけです。私はそのうちの1つだけにポイントカットを適用したいと思っています。ここで引数で区別されたSpring AOPのポイントカット

クラスの例です。Long idとUserユーザー:今、私はポイントカットは2つのだけの引数を取り第二sayHaha方法に適用したい

public class HahaService{ 

    public MyObject sayHaha(User user){ 
     //do something 
    } 

    public MyObject sayHaha(Long id, User user){ 
     //do something 
    } 
} 

私は現在、このポイントカットは両方sayHaha方法に適用される@Pointcut

@Pointcut("execution(public MyObject com.abc.service.HahaService.sayHaha(..))") 
private void hahaPointCut() { 
} 

を持っています。

2番目の方法でしかできない方法はありますか?

答えて

2

はい、ポイントカット式を特定のパラメータ型を持つメソッドに制限するだけです。

は、あなたが実際に引数の値が必要な場合、あなたはそれらをキャプチャするためにバインディングの名前を使用することができ、また、パラメータの種類
@Pointcut("execution(public MyObject com.example.HahaService.sayHaha(Long, com.example.User))") 

..を取り除くと、指定しなさい。たとえば、あなたのポイントカットは

@Pointcut("execution(public MyObject com.example.HahaService.sayHaha(..)) && args(id, user)") 
private void hahaPointCut(Long id, User user) { 
} 

として宣言されるだろうと助言、例えば@Beforeは、今、春AOPはのタイプを決定することができます

@Before("hahaPointCut(id, user) ") 
public void before(Long id, User user) { 
    /* execute advice */ 
} 

(名前を繰り返す)として宣言されますパラメータは、ポイントカット内のパラメータと、argsで使用されている名前との間のマッチによって異なります。 @Beforeのものと一致し、対応する呼び出し引数にバインドされます。

この手法については、Passing parameters to adviceの章で説明しています。

+0

ありがとうSotirios – jasonfungsing

関連する問題