Skip to content

Spring 面试题

1. 什么是 IoC?Spring 如何实现 IoC?

IoC(控制反转):将对象的创建和管理权交给 Spring 容器,而不是由代码直接 new 对象。通过 DI(依赖注入)实现。

实现方式

  • 构造器注入(推荐)
  • Setter 注入
  • 字段注入(@Autowired)

Spring IoC 容器:BeanFactory(基础)和 ApplicationContext(高级,企业开发使用)。

2. Spring Bean 的生命周期?

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

详细流程:

  1. 实例化 Bean 对象
  2. 设置对象属性(依赖注入)
  3. 检查 Aware 接口(BeanNameAware、BeanFactoryAware 等)
  4. BeanPostProcessor 前置处理
  5. 初始化方法(@PostConstruct、InitializingBean)
  6. BeanPostProcessor 后置处理(AOP 代理在此生成)
  7. Bean 就绪,可以使用
  8. 销毁方法(@PreDestroy、DisposableBean)

3. Spring AOP 的实现原理?

Spring AOP 基于动态代理实现:

  • JDK 动态代理:被代理类实现了接口,通过 Proxy 和 InvocationHandler 生成代理
  • CGLIB 代理:被代理类没有实现接口,通过继承目标类生成子类代理(Spring Boot 2.x 默认)

4. Spring 事务的传播行为有哪些?

传播行为说明
REQUIRED(默认)有事务则加入,无则新建
REQUIRES_NEW总是新建事务,挂起当前事务
NESTED嵌套事务,内部事务回滚不影响外部
SUPPORTS有事务则加入,无则非事务执行
NOT_SUPPORTED非事务执行,挂起当前事务
MANDATORY必须在事务中,否则抛异常
NEVER必须在非事务中,否则抛异常

5. Spring Boot 自动配置原理?

  1. @SpringBootApplication 包含 @EnableAutoConfiguration
  2. @EnableAutoConfiguration 通过 @Import 导入 AutoConfigurationImportSelector
  3. 扫描所有 jar 包下的 META-INF/spring.factories 文件
  4. 加载其中配置的自动配置类
  5. 根据 @Conditional 条件注解判断是否生效(如 @ConditionalOnClass@ConditionalOnMissingBean

6. Spring MVC 的请求处理流程?

用户请求 → DispatcherServlet → HandlerMapping(找到 Controller)
    → HandlerAdapter(执行 Controller 方法)
    → Controller → Service → DAO
    → 返回 ModelAndView → ViewResolver(解析视图)
    → 响应给用户