全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

Spring 源码级原理专题

专题说明

本专题深入分析Spring框架的源码实现原理,包括IoC容器启动流程、Bean生命周期源码分析、AOP代理创建机制、循环依赖三级缓存解决方案等核心内容。

学习目标

  1. 理解ApplicationContext的启动流程
  2. 掌握Bean生命周期的源码实现细节
  3. 了解AOP代理创建的源码机制
  4. 理解循环依赖的三级缓存解决方案

学习内容

  • IoC容器启动:refresh()方法核心流程
  • Bean生命周期:doCreateBean()源码分析
  • AOP代理创建:AnnotationAwareAspectJAutoProxyCreator
  • 循环依赖:三级缓存机制详解

学习建议

源码分析需要扎实的Java基础,建议结合IDE调试跟踪源码流程。重点理解核心类的设计思路,不必记忆每个细节。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

Spring Bean生命周期的正确顺序是?

A

实例化 → 属性赋值 → 初始化 → 销毁

B

初始化 → 属性赋值 → 实例化 → 销毁

C

属性赋值 → 实例化 → 初始化 → 销毁

D

实例化 → 初始化 → 属性赋值 → 销毁

2
多选题

以下哪些是Spring Bean生命周期中会执行的回调方法?

A

@PostConstruct标注的方法

B

InitializingBean接口的afterPropertiesSet()方法

C

@Bean注解的initMethod属性指定的方法

D

BeanPostProcessor的postProcessBeforeInitialization()方法

3
判断题

Spring中的Aware接口(如BeanNameAware、ApplicationContextAware)的回调时机是在Bean实例化之后、属性赋值之前执行。

A

B

4
填空题

BeanPostProcessor是Spring框架的重要扩展点,它有两个方法:________________________在初始化方法之前执行,________________________在初始化方法之后执行。Spring AOP的________就是在postProcessAfterInitialization方法中完成的。

5
单选题

在Spring的AbstractAutowireCapableBeanFactory中,创建单例Bean的核心方法是doCreateBean(),以下是其执行顺序的正确描述?

A

createBeanInstance → populateBean → initializeBean → registerSingleton

B

createBeanInstance → initializeBean → populateBean → addSingleton

C

createBeanInstance → populateBean → initializeBean → addSingleton

D

populateBean → createBeanInstance → initializeBean → addSingleton

6
单选题

Spring解决单例Bean循环依赖的核心机制是三级缓存,其中第二级缓存的作用是?

A

存储完整的单例Bean实例

B

存储早期暴露的Bean实例(未完成属性赋值)

C

存储ObjectFactory用于生成代理对象

D

存储Bean的定义信息

7
填空题

Spring容器启动的核心流程在AbstractApplicationContext的refresh()方法中,主要包括:obtainFreshBeanFactory()获取___________,invokeBeanFactoryPostProcessors()执行________________________,registerBeanPostProcessors()注册_________________,finishBeanFactoryInitialization()完成非懒加载Bean的初始化。

8
单选题

Spring支持的依赖注入方式不包括以下哪种?

A

构造器注入

B

Setter方法注入

C

字段注入

D

静态方法注入

9
多选题

当一个接口有多个实现类时,@Autowired注入的匹配规则包括哪些?

A

按类型匹配所有候选Bean

B

按@Qualifier指定的名称匹配

C

按字段名或参数名匹配Bean名称

D

按@Primary标注的Bean优先匹配

10
判断题

Spring可以自动解决构造器注入产生的循环依赖问题。

A

B

11
填空题

Spring处理@Autowired注解的核心类是________________________,它实现了________________________接口用于收集注入元数据,在属性注入阶段通过_________________方法完成依赖查找和注入。

12
单选题

Spring在检测到循环依赖时,会抛出哪个异常?

A

BeanCreationException

B

BeanCurrentlyInCreationException

C

CircularDependencyException

D

NoSuchBeanDefinitionException

13
填空题

Spring DefaultSingletonBeanRegistry中,三级缓存的Map字段分别是:一级缓存singletonObjects存储______________,二级缓存earlySingletonObjects存储__________________,三级缓存singletonFactories存储_____________用于获取早期Bean引用。

14
多选题

以下哪些方案可以解决构造器注入产生的循环依赖?

A

使用@Lazy注解延迟加载其中一个依赖

B

将构造器注入改为Setter注入

C

使用ApplicationContext手动获取Bean

D

重构代码,消除循环依赖

15
单选题

Spring AOP默认使用哪种代理方式?

A

JDK动态代理

B

CGLIB代理

C

AspectJ编译时织入

D

根据目标类是否有接口自动选择

16
多选题

以下关于JDK动态代理和CGLIB代理的说法正确的是?

A

JDK动态代理只能代理接口

B

CGLIB通过继承目标类生成代理

C

JDK动态代理性能优于CGLIB

D

CGLIB无法代理final类和final方法

17
判断题

Spring AOP代理对象是在Bean实例化之前创建的。

A

B

18
填空题

Spring AOP代理创建的核心类是________________________,它实现了________________________接口。在postProcessAfterInitialization方法中调用wrapIfNecessary方法判断是否需要创建代理,最终通过____________创建代理对象。

19
单选题

Spring AOP代理对象方法被调用时,MethodInvocation的proceed()方法的作用是?

A

直接调用目标方法

B

执行下一个拦截器或目标方法

C

创建新的代理对象

D

解析切入点表达式

20
填空题

在Spring AOP中,通过AopContext.currentProxy()可以获取当前代理对象,这需要在_______________________注解中设置exposeProxy=true,或配置spring.aop.auto.proxy-target-class属性。内部通过___________存储当前线程的代理对象引用,解决____________时代理失效问题。

← 上一个专题 Spring 数据访问基础专题
下一个专题 → Spring入门基础专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库