Spring面试题, 什么是 AOP?
Spring面试题, 什么是 AOP?
QA
Step 1
Q:: 什么是 AOP?
A:: AOP(面向切面编程)是指通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。它主要用于分离关注点,例如事务管理、日志记录、权限检查等,从而减少代码耦合,提高代码的可维护性和可重用性。
Step 2
Q:: AOP 和 OOP 有什么区别?
A:: OOP(面向对象编程)关注的是模块化系统中对象的封装和继承,而 AOP 则关注的是系统中的横切关注点,如日志记录、安全、事务管理等。OOP 将关注点封装在对象中,而 AOP 则将横切关注点抽离出来,独立于业务逻辑。
Step 3
Q:: AOP 的主要概念有哪些?
A:: AOP 的主要概念包括切面(Aspect)、连接点(Join Point)、切入点(Pointcut)、通知(Advice)和织入(Weaving)。切面是一个关注点模块;连接点是程序执行的某个点;切入点定义了通知被应用的连接点;通知是要执行的代码;织入是将切面应用到目标对象创建新的代理对象的过程。
Step 4
Q:: Spring AOP 如何实现?
A:: Spring AOP 主要通过动态代理(JDK 动态代理和 CGLIB 动态代理)来实现。在运行时,Spring 创建代理对象,并在特定的连接点上插入横切逻辑。对于接口,Spring 使用 JDK 动态代理;对于类,则使用 CGLIB 动态代理。
Step 5
Q:: 什么是 AspectJ?
A:: AspectJ 是一种增强了 Java 的面向切面编程(AOP)扩展工具。与 Spring AOP 相比,AspectJ 功能更强大,可以进行编译时、加载时和运行时的织入,且支持更多的连接点类型。
Step 6
Q:: 如何在 Spring 中使用 AOP 注解?
A:: 在 Spring 中,可以通过 @Aspect 注解定义切面类,通过 @Pointcut 注解定义切入点表达式,通过 @Before、@After、@AfterReturning、@AfterThrowing 和 @
Around 注解定义通知。将这些注解应用到切面类的方法上,就可以实现相应的 AOP 功能。