获取切面中的 class 个名称和方法参数
Get class name and method parameters in the aspect
我正在从事的项目基本上包含许多 运行 周期性的流程。每个进程都是一个不同的 class,它扩展了我们创建的抽象 class RunnableProcess
,其中包含带有以下签名的抽象方法 run
:
public abstract void run(Map processContext) throws IOException;
为了改进项目的模块化,我开始使用面向方面的编程 (AOP) 来拦截来自每个 RunnableProcess
的 run
调用。我还在学习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
) 初始化有关 - 我希望它与进程 class(扩展 RunnableProcess
的进程相关联) ,并且它被方面拦截),这不会发生在这里(getClass()
检索方面 class)。如何在不更改 RunnableProcess
及其子项的实现的情况下做到这一点?
您想要在其上执行该方法的目标 对象。试试这个:
logger = getLogger(thisJoinPoint.getTarget().getClass());
我正在从事的项目基本上包含许多 运行 周期性的流程。每个进程都是一个不同的 class,它扩展了我们创建的抽象 class RunnableProcess
,其中包含带有以下签名的抽象方法 run
:
public abstract void run(Map processContext) throws IOException;
为了改进项目的模块化,我开始使用面向方面的编程 (AOP) 来拦截来自每个 RunnableProcess
的 run
调用。我还在学习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
) 初始化有关 - 我希望它与进程 class(扩展 RunnableProcess
的进程相关联) ,并且它被方面拦截),这不会发生在这里(getClass()
检索方面 class)。如何在不更改 RunnableProcess
及其子项的实现的情况下做到这一点?
您想要在其上执行该方法的目标 对象。试试这个:
logger = getLogger(thisJoinPoint.getTarget().getClass());