Java面试小练(九)

1). SpringAOP 中的核心概念:

  • 连接点(Join Point):指的是程序执行的某个点,如方法调用、异常抛出等。
  • 切入点(Pointcut):指的是在哪些连接点上进行拦截,如 @Before、@AfterReturning 等。
  • 通知(Advice):指的是在切入点处执行的代码,如 @Before、@AfterReturning 等。
  • 切面(Aspect):指的是一个或多个通知和切入点的组合,如日志记录、事务管理等。
  • 切面类(Aspect Class):指的是一个实现了 Aspect 接口的类,用于定义切面中的通知和切入点。
  • 目标对象(Target Object):指的是被拦截的对象,如一个 Bean 对象。

2). SpringAOP 中有以下几种通知类型:

  • @Before:在切入点之前执行的代码。
  • @AfterReturning:在切入点返回后执行的代码。
  • @AfterThrowing:在切入点抛出异常后执行的代码。
  • @Around:在切入点之前和之后执行的代码,可以控制切入点的执行。

3). 如果多个切面类(如:TimeAspect,DemoAspect,LogAspect),同时匹配到了同一个目标方法,该目标方法运行时,哪个先执行,哪个后执行呢?具体的顺序,是如何控制的?

在 SpringAOP 中,切面类的执行顺序是按照它们在配置文件中的顺序依次执行的。如果多个切面类同时匹配到了同一个目标方法,它们的通知会按照它们在配置文件中的顺序依次执行。如果需要控制通知的执行顺序,可以使用 @Order 注解来指定通知的执行顺序。例如,如果需要先执行 LogAspect,再执行 TimeAspect,可以这样配置:

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    @Bean
    public LogAspect logAspect() {
        return new LogAspect();
    }
    
    @Bean
    public TimeAspect timeAspect() {
        return new TimeAspect();
    }
}

@Aspect
@Order(1)
public class LogAspect {
    //...
}

@Aspect
@Order(2)
public class TimeAspect {
    //...
}

在这个例子中,LogAspect 的执行顺序为 1,TimeAspect 的执行顺序为 2。因此,LogAspect 会先执行,然后是 TimeAspect。

posted @ 2023-12-19 14:21  奕帆卷卷  阅读(18)  评论(0)    收藏  举报