我正在从事一个项目,该项目基本上是很多定期运行的流程。每个进程都是一个不同的类,它扩展了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
?