Spring Framework 面试题精选
1. Spring框架的核心特性是什么?
Spring框架的核心特性包括:
- IoC (控制反转): 将对象的创建和依赖关系的维护交给Spring容器
- DI (依赖注入): 通过构造函数、setter方法或注解注入依赖
- AOP (面向切面编程): 实现横切关注点的模块化
- 事务管理: 提供声明式事务和编程式事务支持
- MVC框架: 用于开发Web应用的MVC框架
- 异常处理: 提供统一的异常处理机制
2. 什么是IoC容器?
IoC容器是Spring框架的核心,主要有两个实现:
- BeanFactory: Spring框架的基础设施,面向Spring本身
- ApplicationContext: BeanFactory的子接口,提供更多企业级功能
IoC容器的主要职责:
- 管理Bean的生命周期
- 维护Bean之间的依赖关系
- 配置Bean的属性
- 实例化Bean
3. Spring Bean的作用域有哪些?
Spring支持以下几种bean作用域:
- singleton: 默认作用域,每个容器中只有一个bean实例
- prototype: 每次请求都会创建新的bean实例
- request: 每个HTTP请求都会创建一个新的bean实例
- session: 每个HTTP会话都会创建一个新的bean实例
- global-session: 全局session作用域,应用在Portlet环境
4. Spring中的依赖注入方式有哪些?
主要的依赖注入方式:
构造函数注入
@Autowired public UserService(UserRepository repository) { this.repository = repository; }
Setter方法注入
@Autowired public void setRepository(UserRepository repository) { this.repository = repository; }
字段注入
@Autowired private UserRepository repository;
5. Spring AOP的实现原理是什么?
Spring AOP的实现原理主要基于:
- 动态代理:
- JDK动态代理(基于接口)
- CGLIB代理(基于类继承)
主要概念:
- 切面(Aspect): 横切关注点的模块化
- 连接点(JoinPoint): 程序执行过程中的某个特定点
- 切点(Pointcut): 匹配连接点的表达式
- 通知(Advice): 在切点处要执行的代码
6. Spring事务管理有哪些方式?
Spring提供两种事务管理方式:
声明式事务
@Transactional public void transferMoney(Account from, Account to, BigDecimal amount) { // 转账逻辑 }
编程式事务
TransactionTemplate template = new TransactionTemplate(); template.execute(new TransactionCallback<Object>() { public Object doInTransaction(TransactionStatus status) { // 事务操作 return null; } });
7. Spring Boot的主要特性是什么?
Spring Boot的核心特性:
- 自动配置: 根据依赖自动配置Spring应用
- 起步依赖: 简化依赖管理
- 嵌入式服务器: 内置Tomcat等服务器
- Actuator: 提供运行时的应用监控
- 外部化配置: 支持多环境配置
8. Spring MVC的工作流程是什么?
Spring MVC的核心组件和流程:
- DispatcherServlet: 前端控制器
- HandlerMapping: 处理器映射
- Controller: 处理器
- ModelAndView: 模型和视图
- ViewResolver: 视图解析器
工作流程:
请求 -> DispatcherServlet -> HandlerMapping -> Controller
-> Service -> Controller -> ViewResolver -> 视图渲染 -> 响应
9. Spring中的设计模式有哪些?
Spring框架中使用的主要设计模式:
- 工厂模式: BeanFactory, ApplicationContext
- 单例模式: Bean默认作用域
- 代理模式: AOP实现
- 观察者模式: 事件机制
- 模板方法: JdbcTemplate等
- 适配器模式: Spring MVC中的适配器
10. Spring Bean的生命周期是怎样的?
Bean的主要生命周期阶段:
- 实例化Bean
- 设置属性值
- 调用BeanNameAware接口
- 调用BeanFactoryAware接口
- 调用ApplicationContextAware接口
- 调用BeanPostProcessor的预处理方法
- 调用InitializingBean接口
- 调用自定义的init方法
- 调用BeanPostProcessor的后处理方法
- Bean可以使用了
- 容器关闭时调用DisposableBean接口
- 调用自定义的destroy方法
面试技巧
回答Spring相关面试题时建议:
- 理解核心概念和原理
- 结合实际项目经验
- 准备具体的代码示例
- 关注Spring最新特性
- 理解各组件之间的关系
- 掌握常见问题的解决方案