首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Spring-AOP切入点和继承的说明

关于Spring-AOP切入点和继承的说明
EN

Stack Overflow用户
提问于 2011-10-11 22:13:50
回答 1查看 3.7K关注 0票数 2

给定my.package中的以下示例类...

代码语言:javascript
复制
public class Foo {
    public void logicNotInBar()     {/*code*/}
    public void logicBarOverrides() {/*code*/}
}

public class Bar extends Foo {
    public void logicBarOverrides() {/*code*/}
}

以及下面的Spring-AOP切入点...

代码语言:javascript
复制
<aop:pointcut id="myPointcutAll" expression="execution(* my.package.*.*(..))"   />
<aop:pointcut id="myPointcutFoo" expression="execution(* my.package.Foo.*(..))" />
<aop:pointcut id="myPointcutBar" expression="execution(* my.package.Bar.*(..))" />

对Bar实例上的上述切入点应用建议的结果是什么?尤其是..。

代码语言:javascript
复制
Bar bar = new Bar();
bar.logicNotInBar();      // will myPointcutBar advice trigger?
bar.logicBarOverrides();  // is myPointcutFoo ignored here?

我想我遗漏了一些关于切入点如何与继承交互的基本事实,所以一个底层的解释/文档可能会有很大的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-12 18:19:34

来自aspectj documentation

匹配方法执行连接点时,如果执行切入点方法签名指定了声明类型,则切入点将只匹配该类型中声明的方法,或覆盖该类型中声明或继承的方法的方法。所以切入点

执行(public void Mid.*())

挑选返回void且没有参数的公共方法的所有方法执行,这些方法是在中间声明的或由中间继承的,即使这些方法在中间的子类中被覆盖。因此,切入点将为以下代码中的Sub.m()选择方法执行连接点:

代码语言:javascript
复制
  class Super {
    protected void m() { ... }
  }
  class Middle extends Super {
  }
  class Sub extends Middle {
    public void m() { ... }
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7727454

复制
相关文章

相似问题

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