继承方法的切入点

时间:2014-04-21 14:15:56

标签: java aop aspectj

如何匹配特定类的所有可用方法?

例如,我有以下课程hierarachy

      A
    / | \
   B  C  D
  /   |   \
 E    F    I
      |
      T

我需要匹配T中可用的所有方法,因此这些方法是T本身定义的方法,也是类AC,{的继承方法{1}}。

我来到了切入点,但对此并不满意,因为它匹配了许多与F无关的其他类:

T

据我理解,这样的切入点aspectj将修改类execution(* A+.*(..)) && this(T) ABCD,{{1}中定义的每个方法},EF。我不想影响I家庭的课程。理想情况下,只有T受到影响(继承方法被aspectj代码覆盖)。有很多类,我想尽量减少对系统其余部分的影响,即我只需要修改类T的行为,并且不希望这些修改影响其他类。

我可以将切入点重写为以下内容:T。但这使我确保层次结构是正确的,并在实际层次结构发生变化时更新它。

感谢。

1 个答案:

答案 0 :(得分:2)

你的假设是错误的,我只是尝试并研究了字节码。该建议只能编入A,C,F,T,因为this()可以在编译期间静态确定。

更新:我忘了提到你的切入点只匹配从A及其子类派生的方法。正如您在标题中所说,如果您真的想要匹配所有继承的方法,请使用execution(* *(..)) && this(T)