Java面试通关⑧:Spring核心IoC/AOP全集
前言导读Spring IoC与AOP是Spring全家桶的核心基石、面试高频深挖考点也是框架源码学习的入门核心几乎所有Spring面试必问。多数开发者只会框架CRUD使用对IoC容器原理、Bean生命周期、循环依赖、AOP动态代理、事务底层机制认知浅薄无法应对中高级面试源码提问。本篇深度拆解Spring核心两大机制全覆盖容器原理、依赖注入、三级缓存、动态代理、事务传播与隔离级别、事务失效场景搭配源码解析、生产避坑、高频真题吃透Spring底层核心摆脱CRUD程序员标签。一、IoC控制反转核心原理 必考指数★★★★★IoC即控制反转是Spring核心设计思想将对象创建、依赖管理的控制权从开发者反转给Spring容器实现组件解耦、统一管理、灵活复用。传统开发主动new对象高耦合IoC容器自动创建、装配、管理对象大幅降低代码依赖。1、依赖注入三种方式构造器注入Spring官方推荐保证对象初始化完成、依赖不可变、避免空指针Set方法注入适合可选依赖、动态修改依赖场景字段注入写法简洁不推荐生产使用耦合度高、不利于单元测试2、Bean完整生命周期实例化 → 依赖注入 → 初始化前置处理 → 初始化方法 → 初始化后置处理 → 存入单例池 → 销毁全程由Spring容器全权管理是面试高频源码考点。二、Spring三级缓存解决循环依赖 必考指数★★★★★循环依赖是多Bean互相依赖导致的初始化死循环Spring通过三级缓存机制完美解决单例Setter/字段注入循环依赖问题。一级缓存存放完整初始化完成的单例Bean二级缓存存放已实例化、未完全初始化的Bean实例三级缓存存放Bean工厂对象提前暴露Bean引用解决循环引用核心原理提前暴露未完成初始化的Bean引用打破循环依赖闭环保证Bean正常创建。构造器注入循环依赖无法解决直接报错。三、AOP面向切面编程 必考指数★★★★★AOP是面向切面编程在不修改原有代码的前提下对方法进行增强实现代码解耦、统一增强、复用通用逻辑典型场景事务控制、日志记录、权限校验、性能监控。1、动态代理两种方式JDK动态代理基于接口实现只能代理接口实现类无接口无法使用CGLIB动态代理基于子类继承实现无需接口可代理所有类Spring默认优先CGLIB2、AOP核心组件切点、切面、通知、连接点前置通知、后置通知、异常通知、环绕通知五种通知类型环绕通知功能最全、可控制方法执行全程。四、Spring事务核心机制 必考指数★★★★★Spring事务基于AOP动态代理实现无需手动管理事务提交回滚极大简化事务开发。核心考点传播机制、隔离级别、事务失效场景。1、七种事务传播机制核心常用REQUIRED默认传播、SUPPORTS支持事务、REQUIRES_NEW新建事务、NESTED嵌套事务适配不同业务嵌套场景。2、四种事务隔离级别读未提交、读已提交、可重复读、串行化逐级解决脏读、不可重复读、幻读问题MySQL默认可重复读。3、常见事务失效场景非public方法、内部调用、异常被捕获、传播机制配置错误、多线程事务、数据库不支持事务以上场景均会导致事务失效是生产高频坑点。五、本篇高频面试真题必背1、IoC控制反转的核心思想与作用IoC即控制反转将对象创建、依赖管理的控制权从开发者交给Spring容器。核心作用彻底解耦组件依赖统一管理Bean生命周期简化代码开发提升程序扩展性、维护性与灵活性是Spring框架的核心根基。2、Spring三级缓存如何解决循环依赖Spring通过三级缓存提前暴露Bean引用解决单例Setter循环依赖。流程Bean实例化后存入三级缓存提前暴露引用被依赖Bean直接获取引用完成初始化后续逐级升级缓存打破循环依赖闭环。仅支持单例、非构造器注入循环依赖构造器循环依赖无法解决。3、Spring事务常见失效场景有哪些1、方法非public修饰2、同类内部方法调用绕过AOP代理3、异常被try-catch捕获未抛出异常4、事务传播机制配置错误5、多线程环境下事务互不感知6、数据库引擎不支持事务如MyISAM7、只读事务、超时触发事务回滚机制失效。以上场景是生产开发中最常见的事务失效坑点开发需严格规避。4、JDK动态代理和CGLIB代理的区别1、实现原理JDK动态代理基于接口实现CGLIB基于继承子类重写方法实现2、使用限制JDK代理要求目标类必须实现接口无接口无法代理CGLIB可代理任意普通类3、性能差异低版本JDK中CGLIB性能更优高版本二者性能持平4、Spring默认规则SpringBoot2.0默认使用CGLIB代理无接口类自动选用CGLIB有接口类可配置切换5、局限性CGLIB无法代理final、private、static方法无法继承final类。5、Spring七种事务传播机制详细说明1、REQUIRED默认当前有事务则加入无则新建事务最常用2、SUPPORTS当前有事务则加入无则以非事务运行3、MANDATORY强制要求在事务内运行无事务直接报错4、REQUIRES_NEW新建独立事务暂停当前已有事务互不影响5、NOT_SUPPORTED始终以非事务方式运行挂起当前事务6、NEVER强制非事务运行检测到事务直接报错7、NESTED嵌套事务依赖父事务父事务回滚子事务必回滚子事务回滚不影响父事务。 本篇章节小结本篇全方位吃透Spring IoC核心原理、依赖注入方式、Bean生命周期、三级缓存循环依赖、AOP动态代理、七大事务传播机制、四大隔离级别、事务失效场景等Spring核心重难点。这部分内容是Spring框架底层核心也是中高级面试必考深挖模块。重点掌握三级缓存解决循环依赖原理、两种动态代理区别、事务传播机制适配场景、高频事务失效坑点彻底理解Spring框架底层运行逻辑告别只会用不会原理的开发短板从容应对Spring源码面试、生产事务问题排查与复杂业务场景开发。