Spring SSM面试关键知识点:生命周期、作用域与事务管理
需积分: 0 89 浏览量
更新于2024-08-03
收藏 363KB DOCX 举报
"Java SSM面试题文档包含了关于SpringBean的生命周期、作用域以及Spring支持的数据库事务传播行为和隔离级别的相关知识。"
在Java的SSM(Spring、Struts、MyBatis)框架中,Spring是核心组件,负责管理Bean的生命周期。以下是SpringBean的生命周期详细过程:
1. 解析配置:Spring会解析XML配置文件或通过注解扫描,获取BeanDefinition,这包含了Bean的所有元数据信息。
2. 创建Bean对象:根据BeanDefinition,Spring通过反射机制创建Bean实例。
3. 属性填充:Spring会将配置的属性值注入到Bean对象中,如属性注入、构造器注入等。
4. 调用Aware接口方法:如果Bean实现了如BeanNameAware、ApplicationContextAware等接口,Spring会回调这些方法,让Bean了解自身的信息和上下文环境。
5. BeanPostProcessor的预初始化处理:在Bean初始化之前,Spring会调用实现BeanPostProcessor接口的`postProcessBeforeInitialization()`方法,提供自定义逻辑。
6. 初始化方法调用:如果Bean声明了`init-method`,Spring会调用这个初始化方法。
7. BeanPostProcessor的后初始化处理:初始化之后,Spring会调用`postProcessAfterInitialization()`方法,这里可能涉及到AOP代理的创建。
8. Bean的存储:最后,Spring将创建好的Bean实例存入一个Map,供后续的业务代码使用。
9. 销毁方法:当Spring容器关闭时,如果Bean实现了DisposableBean接口,会调用`destroy()`方法,执行清理工作。
关于SpringBean的作用域,有以下几种:
- singleton:默认作用域,Spring容器中只会存在一个Bean实例,所有对Bean的请求都会返回同一个对象。
- prototype:每次请求都会创建一个新的Bean实例,适合非单例场景。
- request:在Web环境中,每个HTTP请求都会创建一个新实例,仅在当前请求有效。
- session:在Web环境中,每个HTTP session会有一个实例,仅在当前session内有效。请注意,不要滥用,因为它可能导致内存泄漏。
- global-session:在portlet应用中,全局session作用域,但Spring 5已不再支持。
接着是Spring支持的数据库事务传播行为:
- PROPAGATION_REQUIRED:默认行为,如果当前存在事务,则加入当前事务,如果不存在则新建一个事务。
- PROPAGATION_SUPPORTS:如果当前存在事务,则支持当前事务,否则不开启事务。
- PROPAGATION_MANDATORY:如果当前存在事务,则加入当前事务,如果不存在则抛出异常。
- PROPAGATION_REQUIRES_NEW:总是新建一个事务,如果当前存在事务,则挂起当前事务。
- PROPAGATION_NOT_SUPPORTED:总是运行在非事务环境中,如果当前存在事务,则挂起当前事务。
- PROPAGATION_NEVER:总是运行在非事务环境中,如果当前存在事务,则抛出异常。
- PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内运行,如果不存在,则按照PROPAGATION_REQUIRED进行。
此外,Spring还定义了事务的隔离级别:
- ISOLATION_DEFAULT:使用数据库默认隔离级别,如MySQL的REPEATABLE_READ,Oracle的READ_COMMITTED。
- ISOLATION_READ_UNCOMMITTED:最低隔离级别,允许脏读、幻读和不可重复读。
- ISOLATION_READ_COMMITTED:防止脏读,但可能发生幻读和不可重复读。
- ISOLATION_REPEATABLE_READ:防止脏读和不可重复读,但可能发生幻读。
- ISOLATION_SERIALIZABLE:最高隔离级别,防止脏读、幻读和不可重复读,但性能开销最大。
理解这些概念对于开发和优化基于SSM的Java应用至关重要,它们有助于确保代码的正确性、性能和可维护性。在面试中,这些知识点是评估候选人对Spring框架掌握程度的重要标准。
2022-07-11 上传
2022-11-18 上传
2019-07-23 上传
2024-11-27 上传
2024-11-27 上传
2024-11-27 上传
向前齐步走
- 粉丝: 60
- 资源: 2904
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查