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。

浙公网安备 33010602011771号