要在AspectJ中拦截一个类,你需要定义一个切点,并在切面中编写通知来拦截该切点所匹配的连接点。以下是一个包含代码示例的解决方法:
Maven:
org.aspectj
aspectjrt
1.9.7
Gradle:
implementation 'org.aspectj:aspectjrt:1.9.7'
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class MyAspect {
@Pointcut("execution(* com.example.MyClass.*(..))")
public void myPointcut() {}
@Before("myPointcut()")
public void beforeAdvice() {
System.out.println("Before method execution");
}
}
在这个示例中,切点myPointcut()
匹配了com.example.MyClass
类中的所有方法。通知beforeAdvice()
会在切点匹配的连接点之前执行。
MyClass
,并在其中定义一些方法。package com.example;
public class MyClass {
public void doSomething() {
System.out.println("Doing something");
}
public void doSomethingElse() {
System.out.println("Doing something else");
}
}
main()
方法)中,创建一个切面实例并使用目标类的对象调用方法。package com.example;
public class Main {
public static void main(String[] args) {
MyAspect aspect = new MyAspect();
MyClass myClass = new MyClass();
myClass.doSomething();
myClass.doSomethingElse();
}
}
当你运行这个应用程序时,你会看到在目标类的方法执行之前打印出Before method execution
的消息。
这就是在AspectJ中拦截一个类的基本解决方法,其中切点定义了要拦截的连接点,通知定义了在连接点执行之前或之后要执行的代码。