版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringAOP面试题及详细答案(实战完整版)一、基础概念类面试题1、什么是SpringAOP?核心作用是什么?答案:AOP全称面向切面编程,是一种编程思想,和OOP面向对象编程互补。OOP是纵向的类、对象、方法的封装,而AOP是横向的、对多个模块的通用逻辑进行统一抽取。SpringAOP是Spring框架对AOP思想的轻量级实现,核心是在不修改原有业务代码的前提下,对方法进行增强。日常开发中,我们的业务代码(核心逻辑)和通用代码(日志、权限、事务、限流、监控)是混杂在一起的。AOP就是把这些通用、重复、横切的逻辑抽离出来,统一管理。核心作用:解耦、统一管控、减少重复代码、无侵入增强业务方法。2、AOP和OOP的区别?面试怎么通俗区分?答案:OOP(面向对象):纵向抽象,基于类和继承,解决的是业务层级复用,比如抽取父类、公共工具类,是代码的纵向分层。AOP(面向切面):横向抽象,基于方法拦截,解决的是跨模块通用逻辑复用,比如所有接口的日志、所有业务的事务,是横向切入。通俗理解:OOP是把相同的业务归类;AOP是把所有业务中相同的操作单独抽出来。3、SpringAOP核心术语有哪些?分别是什么意思?答案:一共6个核心术语,开发中高频用到:连接点(JoinPoint):可以被拦截的点,Spring中特指所有方法。不是所有连接点都会被增强,只是候选点。切入点(Pointcut):从所有连接点中,筛选出来需要真正拦截的方法。通过表达式匹配,比如拦截所有Service层方法。通知/增强(Advice):拦截方法之后,要执行的具体增强逻辑,比如打印日志、开启事务。分为前置、后置、异常、最终、环绕通知。切面(Aspect):切入点+通知的结合体,就是一个完整的切面类,里面定义了要拦截哪些方法、拦截后做什么。目标对象(Target):被切面拦截、增强的原始业务对象。织入(Weaving):把切面的增强逻辑,植入到目标方法的过程。SpringAOP是运行时织入。4、SpringAOP有几种通知类型?执行顺序是什么?答案:共5种通知:@Before前置通知:目标方法执行之前执行@AfterReturning后置返回通知:目标方法正常执行完毕、无异常时执行@AfterThrowing异常通知:目标方法抛出异常时执行@After最终通知:无论方法正常结束还是异常结束,都会执行(类似finally)@Around环绕通知:包裹目标方法,可在方法前后增强,功能最强、优先级最高完整执行顺序(无异常):环绕前置>前置通知>目标方法执行>后置返回通知>最终通知>环绕后置完整执行顺序(有异常):环绕前置>前置通知>目标方法执行>异常通知>最终通知>环绕结束(不执行后置返回)二、原理与底层面试题(高频)5、SpringAOP的底层实现原理是什么?答案:SpringAOP底层核心是动态代理,Spring会根据目标类的情况,自动选择代理方式:目标类有接口:使用JDK动态代理,基于接口生成代理对象,只能拦截接口方法目标类无接口:使用CGLIB动态代理,基于子类继承生成代理对象,可以拦截类中所有方法核心流程:项目启动扫描切面类>解析切入点表达式>匹配目标Bean>为目标Bean生成代理对象>调用方法时执行切面增强逻辑。6、JDK动态代理和CGLIB代理的区别?答案:依赖不同:JDK代理是JDK原生支持;CGLIB是第三方字节码工具,Spring已内置实现原理不同:JDK基于接口实现;CGLIB基于继承目标类重写方法使用限制不同:JDK必须要有接口;CGLIB不能代理被final修饰的类和方法(无法继承重写)性能:高版本JDK的JDK代理性能已经优于CGLIB补充:SpringBoot2.0之后,默认统一使用CGLIB代理,不再优先JDK代理。7、SpringAOP和AspectJ的区别?(必问)答案:很多人会混淆,二者完全不是同一个东西:AspectJ:是一套完整的AOP框架,功能强大,支持编译期织入、类加载期织入,属于静态AOP,性能更好,但是使用复杂。SpringAOP:是Spring自研的轻量级AOP实现,只支持运行时织入、动态代理,功能精简,适配Spring生态,日常开发够用。补充:SpringAOP借用了AspectJ的注解和切入点表达式,但底层并不是AspectJ实现,依然是Spring自己的动态代理。8、AOP为什么只能拦截public方法?答案:核心原因是SpringAOP基于动态代理实现:JDK代理、CGLIB代理,都只能重写/拦截公共的非final方法private、protected、static、final方法无法被代理重写,所以AOP无法拦截如果需要拦截非public方法,只能使用原生AspectJ,不能用SpringAOP。三、实战使用与坑点面试题9、介绍一下AOP切入点常用表达式?答案:日常开发最常用execution表达式,格式:execution(返回值包名.类名.方法名(参数))常用写法:拦截所有Service层方法:execution(*com.xxx.service.*.*(..))拦截所有Controller接口:execution(*com.xxx.controller.*.*(..))拦截指定类所有方法:execution(*com.xxx.service.UserService.*(..))除此之外还有@annotation注解式切入点,最常用做自定义注解拦截,比如@Log日志注解、@RateLimit限流注解。10、AOP同一个方法多个切面,执行顺序怎么控制?答案:使用@Order注解或者实现Ordered接口,设置优先级数值。数值越小,优先级越高前置通知:优先级高的先执行后置通知:优先级高的后执行(先进后出)举例:@Order(1)的切面会比@Order(10)的切面优先执行前置逻辑。11、SpringAOP经典坑:内部调用失效问题(必问)答案:这是开发中最常见的AOP失效场景:同一个类中,A方法调用本类的B方法,B方法的切面不生效。原因:AOP增强走的是代理对象,而本类内部方法调用,是通过this原生对象调用,不是代理对象,所以不会触发切面拦截。解决方案:通过Spring上下文获取当前类的代理对象,再调用方法使用AopContext.currentProxy()获取代理对象调用拆分方法到不同类,避免内部调用12、事务失效和AOP的关系是什么?答案:Spring事务@Transactional底层就是基于AOP实现的,所以大部分事务失效问题,本质就是AOP代理失效问题:方法内部调用导致AOP失效,事务不生效方法非public,AOP无法拦截,事务失效final、static方法无法被代理,事务失效13、环绕通知和其他通知的区别?为什么开发中优先用环绕?答案:环绕通知是功能最全的通知:可以手动控制目标方法是否执行(其他通知无法阻止方法执行)可以拿到方法返回值、捕获异常、自定义处理可以统一统计方法耗时、做限流熔断、权限拦截日常开发的日志记录、接口耗时监控、权限校验,基本都是用@Around环绕通知实现。四、场景面试题14、工作中用AOP做过哪些业务场景?答案(实战标准答案,可直接背诵):我在项目中多次使用AOP统一处理横切逻辑,主要场景有:统一日志记录:通过自定义注解+AOP,拦截所有接口请求,自动记录请求参数、响应结果、接口耗时、操作人日志,不用每个接口手动写日志。接口权限校验:自定义权限注解,AOP拦截接口方法,校验当前登录用户是否拥有对应权限,无权限直接拦截返回。统一限流防刷:基于注解+Redis+AOP,实现接口限流,限制单用户每秒请求次数,防止恶意请求。事务管理:Spring声明式事务底层AOP实现,保证业务操作数据一致性。异常统一兜底&监控:AOP拦截业务异常,统一记录异常信息,上报监控平台,避免重复try-catch。15、AOP会不会影响项目性能?答案:几乎不会影响业务性能。SpringAOP是运行时动态代理,仅在项目启动时生成一次代理对象,方法执行时只是多了一层方法拦截、反射调用的逻辑,开销极小。正常业务场景下,AOP带来的性能损耗可以忽略不计。只有在超高并发、极致性能场景下,才会考虑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国万历电子尺市场现状数据分析及前景预测报告
- 2026及未来5年中国CP氨水市场现状数据分析及前景预测报告
- 2026年安徽成人本科模拟试卷及答案详解
- 2026年钢筋工安全教育模拟试卷及答案详解
- 2026年注册计量师(一级)考试冲刺试卷及答案详解
- 2026年河南语文特岗模拟试题(含答案)
- 2026年保密知识答题活动题库试题及答案详解
- 机械设计基础习题及答案详解
- 2026年农电工考试模拟题及答案详解
- 2026年美术省考试模拟题及答案详解
- 2026中国数字员工技术应用报告 -多智能体大脑场景实践研究
- 购物中心七周年庆和梅溪音乐节活动策划方案
- 支气管哮喘的护理内科护理学第七版
- T/CI 878-2025钠离子电池用生物质硬炭负极材料技术要求
- 2026年法治思想试题库及答案
- 2026年四川省党政领导干部政治理论水平(理论测试)考试考前模拟试题及答案
- 2026年初中数学动点问题与最值问题讲座
- 2026年地铁司机职业资格认证标准试题附答案
- 建筑垃圾设备安装调试方案
- 110kV~750kV架空输电线路铁塔组立施工工艺导则
- DB3203-T 1080-2025 城市道路路名牌设置规范
评论
0/150
提交评论