Извините за вводное личное мнение, но я хочу сказать следующее: Вы хотите использовать AspectJ. Почему бы вам просто не попробовать? Вы получите результат намного быстрее, чем написав здесь вопрос и ожидая, пока кто-нибудь ответит на него.Формат вашего вопроса также не подходит для SO, потому что вы не публикуете какой-либо код, с которым у вас есть проблемы, вы просто задаете общий вопрос.
Да, инструментарий финальных классов и / или методов возможен с AspectJ:
Приложение драйвера с последним методом:
package de.scrum_master.app;
public class Application {
public final void doSomething() {}
public static void main(String[] args) {
new Application().doSomething();
}
}
Формат в собственном синтаксисе AspectJ:
package de.scrum_master.aspect;
public aspect MyAspect {
Object around() : execution(* doSomething()) {
System.out.println(thisJoinPoint);
return proceed();
}
}
Aspect в синтаксисе @AspectJ:
Я действительно предпочитаю собственный синтаксис, но в любом случае, по какой-то неизвестной причине некоторые люди предпочитают эту уродливую и многословную версию с импортом, бросками, явно объявленными экземплярами точек соединенияи более сложный способ продолжить:
package de.scrum_master.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class MyAspect {
@Around("execution(* doSomething())")
public Object aroundAdvice(ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println(thisJoinPoint);
return thisJoinPoint.proceed();
}
}
Журнал консоли:
Эффект одинаков для обоих вариантов аспекта:
execution(void de.scrum_master.app.Application.doSomething())