除了使用 @Pointcut 注解来指定 Pointcut 外,还可以通过定义 Aspect 类的不同方法来实现更多 Pointcuts 的捕获。一个方法可以定义一个 Pointcut,该 Pointcut 可以在另一个方法中被引用。
代码示例:
@Aspect public class MyAspect {
@Pointcut("execution(* com.example.service..(..))") public void serviceMethods() {}
@Pointcut("execution(* com.example.repository..(..))") public void repositoryMethods() {}
@Before("serviceMethods() && repositoryMethods()") public void beforeServiceAndRepository() { // 在 service 和 repository 方法之前执行的代码 }
@Before("serviceMethods()") public void beforeService() { // 在 service 方法之前执行的代码 }
@Before("repositoryMethods()") public void beforeRepository() { // 在 repository 方法之前执行的代码 } }
在上述代码中,我们定义了两个 Pointcuts 分别捕获 com.example.service 和 com.example.repository 包中的方法,并在 Aspect 中定义了三个不同的方法,分别在两个 Pointcuts 的交集和两个 Pointcuts 中的单独部分被触发。这样,我们就可以更灵活地对不同的方法进行捕获和处理。