我们使用基于注释的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
}
}我们如何使用基于注释的面向方面编程来拦截ActualImplemetation.someMethod (在父类中实现)?
通过使用aop配置,这可以通过以下方式实现
<aop:advisor pointcut="execution(* com.package..*ActualImplemetation .someMethod(..))" advice-ref="someInterceptor" />发布于 2012-10-01 17:46:04
类似于:
@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-01 20:19:41
这应该可以通过一些修改来工作:
@Pointcut("execution(@CustomAnnotation * *(..))")
public void customAnnotationAnnotatedMethods() {/**/}
@Before("customAnnotationAnnotatedMethods()")
public void adviceBeforeCustomAnnotation() {
...
}https://stackoverflow.com/questions/12670617
复制相似问题