Java AspectJ并在@AfterReturning方法中调用另一个方法
我将在春季开始学习如何使用AspectJ。我有以下课程。我想在新线程中执行第一个方法(长时间运行的任务),所以我认为这可以通过使用方面来实现——当调用firstMethod时,方面会自动将此调用委托给新线程。firstMethod完成后,应使用firstMethod返回的值作为参数调用secondMethodJava AspectJ并在@AfterReturning方法中调用另一个方法,java,spring,aop,aspectj,aspect,Java,Spring,Aop,Aspectj,Aspect,我将在春季开始学习如何使用AspectJ。我有以下课程。我想在新线程中执行第一个方法(长时间运行的任务),所以我认为这可以通过使用方面来实现——当调用firstMethod时,方面会自动将此调用委托给新线程。firstMethod完成后,应使用firstMethod返回的值作为参数调用secondMethod public class SimpleClass{ public Object firstMethod(){ //some operations r
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);
}
}
这是一种原型,我还没有实现它,我很确定它不能那样工作,但我想确定两件小事:
关于您所做的一点评论:为什么您希望有两个线程来模拟一个正常(一个线程)行为?在doInNewThread方法中只有一个线程,您在哪里看到第二个?在这个线程中有一个正在执行的firstMethod,它是一个长时间运行的任务,并且这个方法的结果必须在secondMethod中处理。更具体地说,secondMethod必须在EDT上完成,我希望有一种类似于SwingWorker的方法。在您对要执行的操作的描述中有两个线程:“我希望在新线程中执行第一个方法(长时间运行的任务),在它完成后,使用返回值作为参数运行第二个方法。”--线程A)已经存在的线程,线程B)您创建的线程。@Ralph我更新了我的问题,现在应该更清楚了。