Получить имя класса и параметры метода в аспекте
Я работаю над проектом, в котором много процессов, которые периодически запускаются. Каждый процесс - это отдельный класс, который расширяет абстрактный класс 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;
}
У меня проблема связана с регистратором (org.slf4j.Logger
инициализация - я бы хотел, чтобы он был связан с классом процесса (тот, который расширил RunnableProcess
и это перехватывается аспектом), который здесь не происходит (getClass()
получает класс аспекта). Как я могу сделать это без изменения реализации RunnableProcess
а его дети?
1 ответ
Вы хотите целевой объект, на котором выполняется метод. Попробуй это:
logger = getLogger(thisJoinPoint.getTarget().getClass());