目录

✅ 一、核心概念与对比(Q1, Q2)

1. ApplicationContext 和 BeanFactory 有什么区别?

2. Spring Boot、Spring MVC 和 Spring 有什么区别?

✅ 二、容器与生命周期(Q3-Q5)

3. 介绍一下 Spring 容器的启动流程。

4. 如何实现一个 IOC 容器?

5. 描述一下 Spring Bean 的生命周期?

✅ 三、设计模式与组件(Q6-Q8)

6. Spring 用到了哪些设计模式?请举例说明。

7. 介绍一下 Spring MVC 的工作流程。

8. Spring MVC 的主要组件有哪些?

✅ 四、Spring Boot 特性(Q9, Q10)

9. 如何理解 Spring Boot 中的 Starter?

10. 说一说你知道的 Spring Boot 中常用注解及其底层实现。

🎯 面试加分技巧:串联作答示例


这份清单涵盖了 Spring 框架的核心原理、容器机制、MVC 流程、Boot 特性及设计思想,是中高级 Java 开发面试的“必考组合拳”。下面我将为你整理每道题的高分回答话术,语言精炼、逻辑清晰、重点突出,适合直接用于面试表达。


✅ 一、核心概念与对比(Q1, Q2)

1. ApplicationContext 和 BeanFactory 有什么区别?

标准对比法:

维度 BeanFactory ApplicationContext
定位 Spring 最基础容器接口 BeanFactory 的子接口,功能更强大
加载方式 懒加载(首次获取时才初始化 Bean) 预加载(启动时初始化所有单例 Bean)
功能扩展 仅支持基本 DI 支持 AOP、事件发布、国际化、资源访问等
使用场景 资源受限环境(如嵌入式设备) 企业级应用主流选择

💡 补充:“我们日常开发用的 ClassPathXmlApplicationContextAnnotationConfigApplicationContext 都是 ApplicationContext 的实现类。”


2. Spring Boot、Spring MVC 和 Spring 有什么区别?

层级关系 + 职责划分:

  • Spring → 核心框架,提供 IOC、AOP、事务管理等底层能力。
  • Spring MVC → 基于 Spring 的 Web 层框架,负责请求分发、视图渲染、参数绑定等。
  • Spring Boot → 不是新技术,而是“脚手架”+“自动配置”,简化 Spring 应用的搭建和部署。

🎯 类比:

  • Spring = 汽车发动机 + 底盘
  • Spring MVC = 方向盘 + 仪表盘(Web 控制层)
  • Spring Boot = 整车出厂套装(一键启动,开箱即用)

✅ 总结:“Spring 是根基,MVC 是 Web 模块,Boot 是加速器——三者协同工作,构成现代 Java Web 开发基石。”


✅ 二、容器与生命周期(Q3-Q5)

3. 介绍一下 Spring 容器的启动流程。

四步走战略:

  1. 创建容器对象
    如 new ClassPathXmlApplicationContext("applicationContext.xml")

  2. 加载配置文件 / 扫描注解
    解析 XML 或扫描 @Component@Configuration 等注解,生成 BeanDefinition

  3. 实例化 & 依赖注入
    根据 BeanDefinition 创建 Bean 实例,并通过反射完成属性注入(DI)

  4. 初始化回调 & 注册后置处理器
    执行 InitializingBean.afterPropertiesSet()@PostConstruct、BeanPostProcessor 等

💡 关键点:“整个过程由 AbstractApplicationContext.refresh() 方法驱动,包含 12 个步骤,核心是‘加载→实例化→注入→初始化’。”


4. 如何实现一个 IOC 容器?

手写简易版思路(展示理解深度):

// 1. 定义注解
@interface Component {}
@interface Autowired {}

// 2. 扫描包路径,收集带 @Component 的类
List<Class<?>> classes = scanPackages("com.example");

// 3. 实例化并缓存到 Map<String, Object> beanMap
for (Class<?> clazz : classes) {
    Object instance = clazz.newInstance();
    beanMap.put(clazz.getSimpleName().toLowerCase(), instance);
}

// 4. 处理 @Autowired 字段注入
for (Object bean : beanMap.values()) {
    for (Field field : bean.getClass().getDeclaredFields()) {
        if (field.isAnnotationPresent(Autowired.class)) {
            field.setAccessible(true);
            String name = field.getType().getSimpleName().toLowerCase();
            field.set(bean, beanMap.get(name));
        }
    }
}

✅ 总结:“IOC 本质就是‘反射 + 映射表’——通过扫描、实例化、注入三步,把对象管理权从程序员交给容器。”


5. 描述一下 Spring Bean 的生命周期?

七阶段记忆法:

  1. 实例化(Instantiation) → 调用构造函数创建对象
  2. 属性赋值(Populate) → 注入依赖(setter/构造器/@Autowired)
  3. Aware 接口回调 → 如 BeanNameAwareApplicationContextAware
  4. 前置处理(BeanPostProcessor.postProcessBeforeInitialization)
  5. 初始化(Initialization) → @PostConstruct / InitializingBean.afterPropertiesSet() / init-method
  6. 后置处理(BeanPostProcessor.postProcessAfterInitialization) → AOP 代理在此处生成
  7. 销毁(Destruction) → @PreDestroy / DisposableBean.destroy() / destroy-method

💡 图解口诀:“生(实例化)→ 养(赋值)→ 认亲(Aware)→ 前插(前置)→ 成年(初始化)→ 后插(后置/AOP)→ 死(销毁)”


✅ 三、设计模式与组件(Q6-Q8)

6. Spring 用到了哪些设计模式?请举例说明。

五大经典模式:

  1. 工厂模式 → BeanFactoryApplicationContext 创建 Bean
  2. 单例模式 → 默认 Bean 作用域为 singleton
  3. 代理模式 → AOP 动态代理(JDK/CGLIB),事务、日志等功能实现
  4. 模板方法模式 → JdbcTemplateRestTemplate 封装重复逻辑
  5. 观察者模式 → 事件驱动模型(ApplicationEventPublisher + Listener

💡 加分项:“还有策略模式(不同 ValidationStrategy)、适配器模式(HandlerAdapter)、责任链模式(FilterChain)等。”


7. 介绍一下 Spring MVC 的工作流程。

九步请求旅程:

  1. 用户发送请求 → DispatcherServlet(前端控制器)
  2. Dispatcher 查询 HandlerMapping → 找到对应 Controller 方法
  3. Dispatcher 调用 HandlerAdapter → 执行 Controller 方法
  4. Controller 返回 ModelAndView(或@ResponseBody)
  5. Dispatcher 交给 ViewResolver → 解析视图名
  6. ViewResolver 返回具体 View 对象(如 JSP、Thymeleaf)
  7. Dispatcher 渲染视图 → 填充模型数据
  8. 响应返回给用户
  9. (可选)拦截器、异常处理器全程参与

️ 图示关键词:“前端控制器 → 映射器 → 适配器 → 控制器 → 视图解析器 → 视图渲染”


8. Spring MVC 的主要组件有哪些?

六大核心组件:

  1. DispatcherServlet → 中央调度器,所有请求入口
  2. HandlerMapping → 请求映射到 Handler(Controller 方法)
  3. HandlerAdapter → 适配不同类型的 Handler(如注解方法、旧式 Controller)
  4. Controller → 业务逻辑处理器(@RestController / @Controller)
  5. ViewResolver → 视图名称 → 实际视图对象(JSP/Thymeleaf/Freemarker)
  6. View → 最终渲染页面或 JSON 数据

💡 补充:“还有 LocaleResolverThemeResolverMultipartResolver 等辅助组件。”


✅ 四、Spring Boot 特性(Q9, Q10)

9. 如何理解 Spring Boot 中的 Starter?

依赖打包 + 自动配置双引擎:

  • Starter 是什么?
    一组预定义的依赖集合 + 自动配置类,让你“零配置”快速集成第三方库。

  • 命名规范:

    • 官方 starter:spring-boot-starter-webspring-boot-starter-data-jpa
    • 第三方 starter:mybatis-spring-boot-starterredisson-spring-boot-starter
  • 工作原理:

    1. 引入 starter → 自动传递相关依赖(如 web starter 包含 Tomcat、Jackson、Spring MVC)
    2. 触发 @EnableAutoConfiguration → 扫描 META-INF/spring.factories 中的自动配置类
    3. 条件装配(@ConditionalOnClass@ConditionalOnMissingBean)→ 按需启用功能

✅ 总结:“Starter = 依赖炸弹 + 自动配置开关 —— 让开发者专注业务,不用操心环境搭建。”


10. 说一说你知道的 Spring Boot 中常用注解及其底层实现。

高频注解 + 原理拆解:

表格

注解 作用 底层实现
@SpringBootApplication 主启动类标识 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan
@EnableAutoConfiguration 开启自动配置 导入 AutoConfigurationImportSelector → 读取 spring.factories
@ConditionalOnXXX 条件装配 如 @ConditionalOnClass(RedisTemplate.class) → 类存在才生效
@ConfigurationProperties 绑定配置文件到 Java 对象 通过 Binder 工具类反射赋值
@RestController RESTful 控制器 @Controller + @ResponseBody
@Value 注入配置值 通过 PropertySourcesPlaceholderConfigurer 解析占位符

💡 深入一点:“spring.factories 文件位于 META-INF/ 目录下,存储了所有自动配置类的全限定名,Spring Boot 启动时会加载它们。”


🎯 面试加分技巧:串联作答示例

如果面试官问:“你对 Spring 整体架构怎么理解?”

你可以这样回答:

“Spring 的核心是 IOC 容器(Q1, Q2, Q9, Q10),它通过反射和依赖注入管理 Bean 生命周期。在 Web 层面,Spring MVC(Q5, Q6)基于 DispatcherServlet 实现请求分发,背后大量使用设计模式(Q3)。而 Spring Boot(Q4, Q7, Q8)则通过 Starter 和自动配置,极大简化了这些组件的使用门槛,让我们能‘开箱即用’地构建微服务。”

这样回答,既有广度又有深度,展现系统性思维!


✅ 建议背诵顺序
先掌握 Q1-Q3(基础概念)→ 再理解 Q3/Q4(容器机制)→ 最后攻克 Q6-/Q10(组件与 Boot)

祝你面试顺利,拿下 Offer!🚀

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐