0

機能をインターセプトするメソッドには、アノテーション ベースの AOP を使用しています。

基本インターフェース:

public interface BaseInterface { 
    public void someMethod();
}

抽象ベースの実装:

public abstract class AbstractBaseImplementation implements BaseInterface {
    public void someMethod() {
       //some logic
    }
}

子インターフェース:

public interface ChildInterface extends BaseInterface {
  public void anotherMethod();
}

実装クラス

public class ActualImplemetation extends AbstractBaseImplementation implements ChildInterface {

   public void anotherMethod() {
     // Some logic
   }
}

から拡張された多くのクラスがありますAbstractBaseImplementation。ポイント カットを識別するために、カスタム注釈が作成されます。

アスペクトは

@Aspect
public class SomeAspect {

  @Before("@annotation(customAnnotation)")
  public void someMethod(JoinPoint joinPoint) {
     //Intercept logic
  }

}

Annotation ベースの AOP を使用して (親クラスに実装されている)インターセプトするにはどうすればよいActualImplemetation.someMethodですか?

aop 構成を使用すると、これを実現できます。

<aop:advisor pointcut="execution(* com.package..*ActualImplemetation .someMethod(..))" advice-ref="someInterceptor" />
4

2 に答える 2

1

何かのようなもの :

@Pointcut("execution(* com.package.*ActualImplemetation.someMethod(..))"
// OR
// using BaseInterface reference directly, you can use all sub-interface/sub-class methods
//@Pointcut("execution(* com.package.BaseInterface.someMethod(..))"
logMethod() { //ignore method syntax
 //.....
}
于 2012-10-01T09:46:04.093 に答える
1

これは、いくつかの変更で機能するはずです。

@Pointcut("execution(@CustomAnnotation * *(..))")
public void customAnnotationAnnotatedMethods() {/**/}   


@Before("customAnnotationAnnotatedMethods()")
public void adviceBeforeCustomAnnotation() {
    ...
}
于 2012-10-01T12:19:41.117 に答える