Java AspectJ并在@AfterReturning方法中调用另一个方法

Java 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

我将在春季开始学习如何使用AspectJ。我有以下课程。我想在新线程中执行第一个方法(长时间运行的任务),所以我认为这可以通过使用方面来实现——当调用firstMethod时,方面会自动将此调用委托给新线程。firstMethod完成后,应使用firstMethod返回的值作为参数调用secondMethod

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是SimpleSpect的实例吗?如何提供这样的实例

  • 与第一个问题几乎相同,但如果secondMethod()与firstMethod()不在同一个类中,该怎么办


  • 关于您所做的一点评论:为什么您希望有两个线程来模拟一个正常(一个线程)行为?在doInNewThread方法中只有一个线程,您在哪里看到第二个?在这个线程中有一个正在执行的firstMethod,它是一个长时间运行的任务,并且这个方法的结果必须在secondMethod中处理。更具体地说,secondMethod必须在EDT上完成,我希望有一种类似于SwingWorker的方法。在您对要执行的操作的描述中有两个线程:“我希望在新线程中执行第一个方法(长时间运行的任务),在它完成后,使用返回值作为参数运行第二个方法。”--线程A)已经存在的线程,线程B)您创建的线程。@Ralph我更新了我的问题,现在应该更清楚了。