Spring 面试题
1. 什么是 IoC?Spring 如何实现 IoC?
IoC(控制反转):将对象的创建和管理权交给 Spring 容器,而不是由代码直接 new 对象。通过 DI(依赖注入)实现。
实现方式:
- 构造器注入(推荐)
- Setter 注入
- 字段注入(@Autowired)
Spring IoC 容器:BeanFactory(基础)和 ApplicationContext(高级,企业开发使用)。
2. Spring Bean 的生命周期?
实例化 → 属性赋值 → 初始化 → 使用 → 销毁详细流程:
- 实例化 Bean 对象
- 设置对象属性(依赖注入)
- 检查 Aware 接口(BeanNameAware、BeanFactoryAware 等)
- BeanPostProcessor 前置处理
- 初始化方法(@PostConstruct、InitializingBean)
- BeanPostProcessor 后置处理(AOP 代理在此生成)
- Bean 就绪,可以使用
- 销毁方法(@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 自动配置原理?
@SpringBootApplication包含@EnableAutoConfiguration@EnableAutoConfiguration通过@Import导入AutoConfigurationImportSelector- 扫描所有 jar 包下的
META-INF/spring.factories文件 - 加载其中配置的自动配置类
- 根据
@Conditional条件注解判断是否生效(如@ConditionalOnClass、@ConditionalOnMissingBean)
6. Spring MVC 的请求处理流程?
用户请求 → DispatcherServlet → HandlerMapping(找到 Controller)
→ HandlerAdapter(执行 Controller 方法)
→ Controller → Service → DAO
→ 返回 ModelAndView → ViewResolver(解析视图)
→ 响应给用户