Получить имя класса и параметры метода в аспекте

Я работаю над проектом, в котором много процессов, которые периодически запускаются. Каждый процесс - это отдельный класс, который расширяет абстрактный класс 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());
Другие вопросы по тегам