我们正在使用基于注释的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
}
}
我们如何使用基于AOP的AOP拦截ActualImplemetation.someMethod
(在父类中实现)?
使用aop配置可以通过
实现<aop:advisor pointcut="execution(* com.package..*ActualImplemetation .someMethod(..))" advice-ref="someInterceptor" />
答案 0 :(得分: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
//.....
}
答案 1 :(得分:1)
这应该有一些修改:
@Pointcut("execution(@CustomAnnotation * *(..))")
public void customAnnotationAnnotatedMethods() {/**/}
@Before("customAnnotationAnnotatedMethods()")
public void adviceBeforeCustomAnnotation() {
...
}