2

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

public abstract void run(Map processContext) throws IOException;

为了提高项目的模块化,我开始使用面向方面编程 (AOP) 来拦截run来自每个RunnableProcess. 我还在学习AOP,到目前为止我有以下代码:

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;
}

我遇到的问题与 logger ( org.slf4j.Logger) 初始化有关 - 我希望它与进程类(扩展的那个RunnableProcess,并且它被方面拦截)链接,这不会发生在这里(getClass()检索方面类)。我怎样才能做到这一点而不改变其子项的实现RunnableProcess

4

1 回答 1

3

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

logger = getLogger(thisJoinPoint.getTarget().getClass());
于 2018-01-08T01:06:17.903 回答