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

时间:2012-11-12 13:57:57

标签: java spring aop aspectj aspect

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

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

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

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

0 个答案:

没有答案