后端经典面试题合集, 什么是 AOP?有哪些实现 AOP 的方式?Spring AOP 和 AspectJ AOP 有什么区别?
后端经典面试题合集, 什么是 AOP?有哪些实现 AOP 的方式?Spring AOP 和 AspectJ AOP 有什么区别?
QA
Step 1
Q:: 什么是 AOP(面向切面编程)?
A:: AOP,全称为Aspect-
Oriented Programming,是一种编程范式,旨在通过分离横切关注点来提高代码的模块化。横切关注点通常是指那些在多个模块中都会重复出现的功能,如日志记录、事务管理、安全性等。通过AOP,这些功能可以被集中管理,不需要在每个模块中都实现,从而提高代码的可维护性。
Step 2
Q:: AOP 的核心概念是什么?
A:: AOP的核心概念包括:Aspect(切面),Pointcut(切入点),Advice(通知),Joinpoint(连接点),和 Weaving(织入)。切面是横切关注点的模块化表达,切入点定义了切面应用的位置,通知是具体的行为,在切入点前或后执行,连接点是程序执行过程中的某个点,而织入是将切面应用到目标对象的过程。
Step 3
Q:: 有哪些实现 AOP 的方式?
A:: AOP 的实现方式主要包括代理模式、字节码操作、注解等。在Java中,Spring AOP主要使用动态代理和CGLIB代理,AspectJ则通过编译时织入和类加载时织入实现。
Step 4
Q:: Spring AOP 和 AspectJ AOP 有什么区别?
A:: Spring AOP 是基于代理的实现方式,通常用于方法级别的AOP,实现简单,易于集成到Spring框架中。AspectJ则是一个功能更为强大的AOP框架,它支持编译时、类加载时和运行时的切面织入,能够对类级别、构造器等进行更深层次的控制。
Step 5
Q:: AOP 中的通知(Advice)有哪几种类型?
A:: AOP 中的通知主要包括以下几种类型:Before(前置通知),在方法执行之前执行;After(后置通知),在方法执行之后执行;After Returning(返回通知),在方法正常返回之后执行;After Throwing(异常通知),在方法抛出异常之后执行;Around(环绕通知),可以在方法执行前后执行代码,并且可以控制方法是否执行。