我开始学习如何在 Spring 中使用 AspectJ。我有以下课程。我想在新线程中执行第一个方法(长时间运行的任务),所以我认为这可以使用 Aspect 来实现 - 当调用 firstMethod 时,Aspect 会自动将此调用委托给新线程。在 firstMethod 完成后,应该调用 secondMethod 并返回 firstMethod 值作为参数。
public class SimpleClass{
public Object firstMethod(){
//some operations
return object;
}
public void secondMethod(Object returnedObjectByFirstMethod){
}
}
@Aspect
public class SimpleAspect {
@Around("execution(* SimpleClass.firstMethod(..))")
public void doInNewThread(final ProceedingJoinPoint joinPoint) throws Throwable {
Thread t = new Thread(new Runnable() {
public void run() {
joinPoint.proceed();
}
});
t.start();
}
@AfterReturning(
pointcut = "execution(* SimpleClass.firstMethod(..))",
returning= "result")
public void doAfter(JoinPoint joinPoint, Object result) {
SimpleClass.secondMethod(result);
}
}
这是一种原型,我还没有实现它,我很确定它不能那样工作,但我想确定两件琐碎的事情:
如果此方法不是静态的,我如何在 doAfter() 中调用 secondMethod()?我需要一种 SimpleClass 的实例是 SimpleAspect 吗?如何提供这样的实例?
与第一个问题几乎相同,但是如果 secondMethod() 与 firstMethod() 不在同一个类中怎么办?