Java 可以将';大约';建议是否可以从单独的功能执行?
我需要执行一些常见的代码来获得一些“周围”的建议。因此,我将通用代码移到了一个函数中。但我的问题是,在这个公共函数中,procedure()不起作用。请参阅下面的代码Java 可以将';大约';建议是否可以从单独的功能执行?,java,aspectj,Java,Aspectj,我需要执行一些常见的代码来获得一些“周围”的建议。因此,我将通用代码移到了一个函数中。但我的问题是,在这个公共函数中,procedure()不起作用。请参阅下面的代码 aspect MyAspect { pointcut myPointCut() : execution(* com.test.MyTestInterface.*(..)); Object around() : myPointCut() { Object retVal = null;
aspect MyAspect {
pointcut myPointCut() : execution(* com.test.MyTestInterface.*(..));
Object around() : myPointCut() {
Object retVal = null;
try {
ProceedingJoinPoint pjp = (ProceedingJoinPoint) thisJoinPoint;
myfunction(pjp);
} catch (Throwable e) {
e.printStackTrace();
}
return retVal;
}
public void myfunction(ProceedingJoinPoint pjp) {
System.out.println("Inside myfunction()" + pjp.getSignature());
pjp.proceed();
}
}
将此连接点强制转换为处理连接点无效。“Inside myfunction()”已打印,但下一条语句不执行切入点截获的方法
有什么方法可以做到这一点吗?我没有让它使用传统语法,但我想我可能有一个解决方案:
您可以在around advice方法内部定义的匿名类的方法中包装
procedure
调用。如图1所示:
谢谢你,弗雷德。这正是我所做的。我昨天就想出来了,我不得不写笔记回到这个论坛并留下最新消息。你赢了我!谢谢你,布鲁诺。我没有尝试你建议的方法。我使用上一篇文章中提到的注释来实现它。我发现这种方法更简单。谢谢你的回复。
@Aspect
public class MyAspect {
@Around("execution(* *(..)) && !within(MyAspect)")
public Object aroundTest(ProceedingJoinPoint thisJoinPoint){
Object retVal = null;
try {
myfunction(thisJoinPoint);
} catch (Throwable e) {
e.printStackTrace();
}
return retVal;
}
public void myfunction(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("Inside myfunction(): " + pjp.getSignature());
pjp.proceed();
}
}
interface Proceedable {
public void doProceed();
}
public aspect MyAspect {
public void auxMethod(Proceedable p) {
// Can invoke p.doProceed()
}
void around(): somePointcut() {
auxMethod(new Proceedable() {
public void doProceed() { proceed(); }
});
}
}