gpt4 book ai didi

java - aspectJ 切入点如何与动态选择器一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:23 26 4
gpt4 key购买 nike

我正在做一个小项目,该项目在测试 Java 应用程序时确定代码覆盖率。它基本上由一个用于 IDE 的插件组成,它可以找到项目中的所有类和方法并将它们保存在数据库中,以及一个具有 aspectJ 切入点的代理,它围绕所有这些方法编织以记录它们的执行。

我遇到的问题是我只想记录该项目的开发人员实际编写的方法,而不是底层库的方法。所以切入点的定义方式需要只织入实际项目包中类的方法。另一方面,由于代理要用于各种项目,我无法对这些包进行硬编码。

到目前为止,我的尝试是从数据库中读取所有包名称并从中构建一个字符串。基本上它看起来像这样:

private static final String POINTCUT_STRING = AspectUtil.buildPointcutString();

然后,在定义切入点时:

@Pointcut(POINTCUT_STRING)

问题是,这不起作用,因为显然在定义切入点时,

Attribute value needs to be a constant.

那么,我怎样才能使我只能在我的数据库中的包中的类中编织方法?

提前致谢,祝您玩得愉快!

最佳答案

我认为动态方面方法不会奏效,因为 aspectj 不会将编织器暴露给任何状态管理或更改。虽然这在理论上在运行时是可能的,但在编译时绝对不可能(并且您可以选择在编译时添加方面)。

但是对于你的问题...

您使用什么编织策略?编译还是运行时?我发现编译工作得很好,但我不确定如何将运行时与 aspectj 一起使用。但是我可以说的是,如果您使用编译,那么在任何情况下您都只会编织应用程序类,因为这是您可以访问的所有内容。

另一条评论是,如果您想做一些动态的事情,您最好将条件放在是否监视该方法的下游方面的代码覆盖率上。因此,当执行方面时,它要做的第一件事就是决定是否应监视此类/方法调用的覆盖范围,然后从那里继续...

关于java - aspectJ 切入点如何与动态选择器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51632105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com