Android AspectJ @Around与方法args无法正常工作

时间:2017-08-09 09:33:04

标签: android aop aspectj

在我目前的Android应用程序中,我正在调查@AspectJ

的使用情况

我正试图捕捉"对签名类似的方法的所有执行: -

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

我有以下POINTCUTS

1)忽略我的Aspect类:

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

2)全部选择"点击" customType参数的方法

@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() { }

1 个答案:

答案 0 :(得分:3)

我不确定您的问题,但您可以尝试更改var koa = require('koa'); var app = new koa(); var router = require('koa-router'); var route = router(); // These three lines will help you app.use(route.routes()); // to route to your given path and route.get("/user/", functionname); // will call the generator function. function *functionname(next){ console.log('in side the function'); this.body="hi this is my new page"; yield next; }; 这样的问题。

POINTCUT

看看我已经删除了@Pointcut("!within(com.example.aspect.TraceAspect)") public void notAspect() { } @Pointcut("execution(* com.example..*.*Clicked(com.example.CustomType))) public void customClicked() { } 注释中的args(custom)部分。是的,我当然删除了@Around函数的函数参数参数和语句末尾的分号。

现在通过从这里传递参数来编写这样的customClicked函数。

selectedClicked

它应该没有失败。