2

私は Spring AOP に精通していますが、実際の経験はあまりありません。

私の質問は、クラスのすべてではなく一部のメソッドに AOP 機能を持たせたい場合、単一のポイントカットで可能になるかどうかです。たとえば、クラスに save1、save2、get1、get2 の4 つのメソッドがあり、 save1 と save2のみにAOP を適用したい場合、そのための単一のポイントカットを作成するにはどうすればよいでしょうか? ポイントカット式はどのようになりますか? またはそれは可能ですか?

4

4 に答える 4

2

それを行うには多くの方法があります(ワイルドカード式、aspectJアノテーションを使用、..)aspectJの例を挙げます

class MyClass{
          @MyPoint 
          public void save1(){
          }  

          @MyPoint
          public void save2(){
          }  

          public void save3(){
          }  

          public void save4(){
          }  

}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyPoint {
}

@Aspect
@Component
public class MyAspect {
    @Before("@annotation(com.xyz.MyPoint)")
    public void before(JoinPoint joinPoint) throws Throwable {
        //do here what u want
    }

}

したがって、注釈をマークしている限り、@MypointSpring はこのメソッドのアスペクトの前に呼び出します。Spring があなたではなく、このメソッドとオブジェクトを管理していることを確認してください。クラスパスにspectJを含める

于 2012-09-25T18:35:04.987 に答える
1

アドバイスを適用するメソッドを選択するには、ポイントカット式を指定する必要があります。

Spring ドキュメントの7.2.3 ポイントカットの宣言を参照し、実行ジョインポイント指定子を使用してメソッドを選択します。

于 2012-09-25T18:27:37.403 に答える
1

そのようなポイントカット式を持つことでうまくいくはずです

**execution(* save*(..))**

詳しくはこちら

于 2012-09-25T18:30:06.253 に答える