是否可以使用AspectJ在最终方法周围添加建议?我完全知道使用Spring AOP是不可能的。但是我找不到与AspectJ相关的任何东西。
答案 0 :(得分:0)
很抱歉,个人介绍性的观点是,但我想这样说:您想使用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();
}
}
使用@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())