获取方面中的类名和方法参数

时间:2018-01-07 20:00:53

标签: java logging aop aspectj ajdt

我正在开发一个基本上是定期运行的很多进程的项目。每个进程都是一个不同的类,它扩展了我们创建的抽象类RunnableProcess,其中包含带有以下签名的抽象方法run

public abstract void run(Map processContext) throws IOException;

为了改善项目的模块化,我开始使用面向方面编程(AOP)拦截来自每个run的{​​{1}}个调用。我还在学习AOP,直到现在我还有以下代码:

RunnableProcess

我遇到的问题与记录器(import static org.slf4j.LoggerFactory.getLogger; import org.slf4j.Logger; import process.RunnableProcess; import java.util.Map; public aspect ProcessRunInterceptorProtocol { pointcut runProcess() : call(void RunnableProcess.run(Map)); before(): runProcess() { logger = getLogger(getClass()); logger.info("running process " + thisJoinPoint); } after(): runProcess() { logger = getLogger(getClass()); logger.info("process run successfuly " + thisJoinPoint); } private Logger logger; } )初始化有关 - 我希望它与进程类(扩展org.slf4j.Logger的进程类)相关联,它是被方面拦截),这里没有发生(RunnableProcess检索方面类)。如何在不改变getClass()及其子项的实现的情况下做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要执行该方法的目标对象。试试这个:

logger = getLogger(thisJoinPoint.getTarget().getClass());