java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...

Does it mean “get all join points that are in P, then add all join

points that are in Q, then match on anything that flows from any of

them”?

不,这意味着获得P和Q中的所有连接点,因此它是交叉点.

Or does it mean “get all join points in P that are also in Q”, i.e.

all flow points within X() below?

是的,“获得P中的所有连接点也在Q中”,其余部分则为“否”.原因是切入点P定义了一个连接点:execution(void Example.P()),而切入点Q定义了一个连接点:execution(void Example.Q()).因为这些连接点不同,所以它们的交集是空集.从空集中获取的cflow也是一个空集.这就是为什么在AspectJ文档中,这个切入点标记为“不应该发生”.

希望这可以帮助!

这是Power Point演示文稿中的一个误导性引用:

cflow(P && Q) means that you first combine the pointcuts P and Q, and

all the join points flowing from that are in this collection

“combine”一词应改为“intersect”.

public class Example {

public void P() {

Q();

}

public void Q() {

}

public static void main(String[] args) {

new Example().P();

}

}

如果你运行它,输出应该是这样的:

pointcut: P join point: execution(Example.P())

pointcut: flowP join point: execution(Example.P())

pointcut: flowP join point: call(Example.Q())

pointcut: Q join point: execution(Example.Q())

pointcut: flowP join point: execution(Example.Q())

pointcut: flowQ join point: execution(Example.Q())

pointcut: flowPAndflowQ join point: execution(Example.Q())

这表明只有3个连接点:

A: execution(Example.P())

B: call(Example.Q())

C: execution(Example.Q())

切入点:

pointcut P includes only A

pointcut Q includes only C

pointcut flowP includes A, B and C

pointcut flowQ includes only C

pointcut flowPAndflowQ includes only C

我们现在可以看到P&& flow是一个空集,而flowP&& flowQ包括C.

我还包括了额外的切入点:cflow(P()&& publicMethods())(这个切入点的建议在代码中被注释掉了). publicMethods()是执行(public * *(..)).与cflow(P()&& Q())不同,它不会导致空集.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值