获取Spring AOP中截获方法的调用者

时间:2017-10-23 11:21:43

标签: java aop aspectj

有没有办法在Spring AOP中获取截获方法的调用者(MVC更具体)? 我有两个方法说“callerM1()”和“callerM2()”调用截获的方法“method()”。然后我有这样一个方面:

@Before("execution(* *.method(..)) && args(arg1)")
public Object doSomething(...){
    //find out which one and do something
} 

如何通过仅使用Spring AOP功能来学习“callerM1()”或“callerM2()”中的哪一个调用“method()”?在这里我也可以使用周围的建议,但我想这是一个不同的问题。我检查了各种可能性,包括EnclosingStaticPart和更改切入点定义但没有成功。

快速解决方案是使用StackTraceElement但我认为不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

提供了一个解决方案here,需要完整的方面而不仅仅是弹簧。

@Aspect
public class TestAspect {

    @Around("call(void com.spring.ioc.Aggregated.*(..))")
    public Object advice(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("xxxxxxxxxxxx: TestAspect.advice(): aspect is called on " + joinPoint
            + ". This object: " + joinPoint.getThis());
        return joinPoint.proceed();
    }
}