Spring面试题, Spring AOP 和 AspectJ 有什么区别?
Spring面试题, Spring AOP 和 AspectJ 有什么区别?
QA
Step 1
Q:: Spring AOP 和 AspectJ 有什么区别?
A:: Spring AOP 是 Spring Framework 中用于面向切面编程的框架,主要基于动态代理实现,可以对 Spring 管理的 Bean 进行切面拦截。而 AspectJ 是一个完整的面向切面编程(AOP)的框架,提供了更强大的功能和灵活性,可以对任何 Java 类进行编织,而不仅仅是 Spring 管理的 Bean。Spring AOP 适合用于简单的应用场景,而 AspectJ 适合复杂的切面需求。
Step 2
Q:: Spring AOP 如何实现切面?
A:: Spring AOP 主要通过动态代理来实现切面。对于实现了接口的 Bean,Spring AOP 使用 JDK 动态代理来生成代理对象;对于没有实现接口的 Bean,Spring AOP 使用 CGLIB 来生成代理对象。在代理对象的相关方法被调用时,切面逻辑会被插入到方法调用的前后或环绕方法中。
Step 3
Q:: Spring AOP 有哪些核心概念?
A:: Spring AOP 主要有以下几个核心概念:
-
切面(Aspect):封装了横切关注点的模块。
-
连接点(Join Point):程序执行过程中可插入切面的点。
-
通知(Advice):切面在连接点执行的具体动作。
-
切入点(Pointcut):定义了哪些连接点会被切面增强。
-
目标对象(Target Object):被代理的对象。
-
代理(Proxy):增强了目标对象的对象。
-
织入(Weaving):将切面应用到目标对象以创建代理对象的过程。
Step 4
Q:: 如何在 Spring 中定义一个切面?
A:: 在 Spring 中可以通过注解或 XML 配置来定义一个切面。使用注解时,可以在类上使用 @Aspect 注解来标识一个切面类,并使用 @Before、@After、@Around 等注解来定义通知。使用 XML 配置时,可以通过 <aop:config>
元素来配置切面和通知。
Step 5
Q:: 什么是横切关注点(Cross-
Cutting Concern)?
A:: 横切关注点指的是那些在应用程序中多个模块都会涉及的逻辑或功能,比如日志记录、安全检查、事务管理等。通过 AOP,可以将这些横切关注点从业务逻辑中分离出来,使代码更加清晰和模块化。
Step 6
Q:: 在 Spring AOP 中如何控制通知的执行顺序?
A:: 在 Spring AOP 中,可以通过 @Order 注解来控制多个通知的执行顺序。@
Order 注解的值越小,通知的优先级越高,越早执行。如果没有指定顺序,则默认的顺序是未定义的,可能会导致无法预测的行为。