首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Spring Annotation的AOP拦截父类中实现的方法

基于Spring Annotation的AOP拦截父类中实现的方法
EN

Stack Overflow用户
提问于 2012-10-01 17:27:33
回答 2查看 3.4K关注 0票数 0

我们使用基于注释的AOP方法来拦截功能。

基接口:

代码语言:javascript
复制
public interface BaseInterface { 
    public void someMethod();
}

抽象基础实现:

代码语言:javascript
复制
public abstract class AbstractBaseImplementation implements BaseInterface {
    public void someMethod() {
       //some logic
    }
}

子接口:

代码语言:javascript
复制
public interface ChildInterface extends BaseInterface {
  public void anotherMethod();
}

实现类

代码语言:javascript
复制
public class ActualImplemetation extends AbstractBaseImplementation implements ChildInterface {

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

有许多类从AbstractBaseImplementation扩展而来。将创建自定义注释,用于标识点切割。

方面是

代码语言:javascript
复制
@Aspect
public class SomeAspect {

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

}

我们如何使用基于注释的面向方面编程来拦截ActualImplemetation.someMethod (在父类中实现)?

通过使用aop配置,这可以通过以下方式实现

代码语言:javascript
复制
<aop:advisor pointcut="execution(* com.package..*ActualImplemetation .someMethod(..))" advice-ref="someInterceptor" />
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-01 17:46:04

类似于:

代码语言:javascript
复制
@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
EN

Stack Overflow用户

发布于 2012-10-01 20:19:41

这应该可以通过一些修改来工作:

代码语言:javascript
复制
@Pointcut("execution(@CustomAnnotation * *(..))")
public void customAnnotationAnnotatedMethods() {/**/}   


@Before("customAnnotationAnnotatedMethods()")
public void adviceBeforeCustomAnnotation() {
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12670617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档