【问题标题】:Get class name and method parameters in the aspect获取切面中的类名和方法参数
【发布时间】:2018-01-07 20:00:52
【问题描述】:

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

public abstract void run(Map processContext) throws IOException;

为了提高项目的模块化,我开始使用面向方面编程 (AOP) 来拦截来自每个 RunnableProcessrun 调用。我还在学习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;
}

我遇到的问题与记录器 (org.slf4j.Logger) 初始化有关 - 我希望它与进程类相关联(扩展 RunnableProcess 的那个,它正在被切面拦截) ,这里没有发生(getClass() 检索方面类)。如何在不更改 RunnableProcess 及其子代的实现的情况下做到这一点?

【问题讨论】:

    标签: java logging aop aspectj ajdt


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2013-10-07
      • 2011-10-09
      • 2016-10-21
      • 2015-10-01
      • 2011-04-22
      相关资源
      最近更新 更多