我开始学习如何在Spring中使用AspectJ。我有以下课程。我想在新线程(长时间运行的任务)中执行第一个方法,所以我认为这可以使用Aspect实现 - 当调用firstMethod时,Aspect会自动将此调用委托给新的Thread。 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()不在同一个类中会怎样?