Spring Boot进阶:原理、实战与面试题分析
上QQ阅读APP看书,第一时间看更新

1.3.1 核心容器

针对核心容器,我们将深入讨论Spring所具备的依赖注入和面向切面编程这两项基础功能。

1. 核心容器的实战内容

(1)依赖注入

对于依赖注入而言,Spring容器为开发人员提供了字段注入、构造器注入和Setter方法注入这三种实现方式。不同的依赖注入方式各有其优缺点,我们将对它们进行详细的分析,并给出Spring依赖注入的实现原理。

当讨论如何管理对象之间的依赖关系时,循环依赖是一个不可回避的话题。Spring的依赖注入机制在解决循环依赖问题时采用了三级缓存机制。这是Spring在设计和实现上的一大特色,也是开发人员在面试过程中经常遇到的话题,我们将对三级缓存结构以及循环依赖解决方案进行深入剖析。

从实战角度讲,把握Bean的作用域、灵活使用注解配置、设置组件扫描范围以及对不同配置进行性能分析是日常使用Spring依赖注入时所需要掌握的一些开发技巧。

(2)面向切面编程

对于AOP而言,Spring框架提供了连接点、通知、切点等核心概念,以及@Before、@After、@Around、@AfterThrowing和@AfterReturning等注解。通过这些注解,开发人员可以很轻松地在业务代码中嵌入切面。

AOP的使用虽然简单,但它背后的实现原理并不简单。想要理解AOP的原理就需要对动态代理机制有深入的了解。Java世界中典型的JDK动态代理和CGLIB动态代理,在Spring中也都得到了广泛应用。我们将基于这些代理机制来详细分析Spring AOP的实现原理。

从实战角度讲,活用切点表达式、确保类内方法调用能够应用代理、避免代理机制引起多次初始化过程以及优先使用JDK动态代理是常见的开发技巧。

2. 核心容器的实战案例

在核心容器部分,我们将给出三个实战案例,即消除循环依赖案例、Spring AOP案例以及Spring AOP代理机制对性能的影响案例。

针对如何消除循环依赖,业界也存在一些常见的做法。我们将通过代码实例给出消除循环依赖的三种实现方法,即提取中介者、转移业务逻辑以及使用回调机制。

Spring AOP案例演示如何在Spring中使用面向切面编程技术。而AOP代理机制对性能的影响案例的目标是分析各种动态代理机制对于Spring执行性能的影响。我们将分别针对JDK动态代理和CGLIB动态代理给出对应的性能评估,并明确推荐使用的代理机制。