gpt4 book ai didi

Android AspectJ @Around 方法参数不工作

转载 作者:行者123 更新时间:2023-11-29 16:53:31 28 4
gpt4 key购买 nike

在我当前的 Android 应用程序中,我正在研究 @AspectJ

的使用

我正在尝试“捕获”对签名类似于以下方法的所有执行:-

public void onMethodClicked(com.example.CustomType customType) {}

我有以下POINTCUTS

1) 忽略我的 Aspect 类:

@Pointcut("!within(com.example.aspect)")
public void notAspect() { }

2) 选择所有带有 customType 参数的“Clicked”方法

@Pointcut("execution(* com.example..*.*Clicked(com.example.CustomType)) && args(custom)";)
public void customClicked(CustomType custom) { }

3) 我的@Around:-

@Around("notAspect() && customClicked()")
public Object selectedClicked(final ProceedingJoinPoint joinPoint, CustomType custom) throws Throwable {
Log.d(TAG, "Found a clicked method " + custom);
Object result = joinPoint.proceed();

return result;
}

当我构建我的 Android 应用程序时,我收到这些消息

no match for this type name: CustomType [Xlint:invalidAbsoluteTypeName]

bad parameter to pointcut reference
formal unbound in pointcut

no match for this type name: com.example.aspect [Xlint:invalidAbsoluteTypeName]

the parameter custom is not bound in [all branches of] pointcut
use of ProceedingJoinPoint is allowed only on around advice (arg 1 in (before(extraFlags: 2): (((!within(com.example.aspect+) && execution(* com.example..*.*Clicked(com.example.CustomType)) && args(custom)) && persingleton(com.example.aspect.TraceAspect))->void com.example.aspect.TraceAspect.selectedClicked(org.aspectj.lang.JoinPoint, com.example.CustomType)))

我做错了什么?

更新

我通过如下更正 !within() 修复了一条错误/警告消息:-

1) 忽略我的 Aspect 类:

@Pointcut("!within(com.example.aspect.TraceAspect)")
public void notAspect() { }

最佳答案

我不确定你的问题,但你可以尝试像这样更改 POINTCUT

@Pointcut("!within(com.example.aspect.TraceAspect)")
public void notAspect() { }

@Pointcut("execution(* com.example..*.*Clicked(com.example.CustomType)))
public void customClicked() { }

看,我已经删除了 @Around 注释中的 args(custom) 部分。是的,我当然删除了 customClicked 函数的函数参数参数和语句末尾的分号。

现在通过从此处传递参数来编写您的 selectedClicked 函数。

@Around("notAspect() && customClicked() && args(custom)")
public Object selectedClicked(final ProceedingJoinPoint joinPoint, CustomType custom) throws Throwable {

Log.d(TAG, "Found a clicked method " + custom);
Object result = joinPoint.proceed();

return result;
}

它应该可以正常工作。

关于Android AspectJ @Around 方法参数不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586836/

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