2

我开始学习如何在 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);
   }
}

这是一种原型,我还没有实现它,我很确定它不能那样工作,但我想确定两件琐碎的事情:

  1. 如果此方法不是静态的,我如何在 doAfter() 中调用 secondMethod()?我需要一种 SimpleClass 的实例是 SimpleAspect 吗?如何提供这样的实例?

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

4

0 回答 0