深度解析Java SSM框架面试关键点
需积分: 0 43 浏览量
更新于2024-08-03
收藏 364KB DOCX 举报
"Java SSM(Spring、SpringMVC、MyBatis)面试题文档,包含SpringBean的生命周期、SpringBean的作用域、Spring支持的数据库事务传播行为和事务的隔离级别等相关内容。"
在Java SSM框架中,Spring是核心组件,负责管理对象的生命周期和依赖注入。以下是对面试题中提及的知识点的详细说明:
### SpringBean的生命周期
1. 解析配置:Spring首先解析XML配置文件或通过注解扫描,获取BeanDefinition,它包含了Bean的类名、属性、依赖等信息。
2. 创建Bean对象:根据BeanDefinition,Spring通过反射创建Bean实例。
3. 属性填充:接着,Spring使用setter方法注入Bean的属性值。
4. 调用Aware接口:如果Bean实现了如`BeanNameAware`、`ApplicationContextAware`等接口,Spring会回调这些方法,传递相关信息给Bean。
5. BeanPostProcessor:Spring会调用实现`BeanPostProcessor`接口的类的`postProcessBeforeInitialization()`方法,在初始化之前执行自定义逻辑。
6. 初始化方法:如果Bean声明了`init-method`,Spring会调用该初始化方法。
7. BeanPostProcessor后处理:接着执行`BeanPostProcessor`的`postProcessAfterInitialization()`方法,这里可能涉及到AOP代理。
8. Bean存储:最后,Spring将创建好的Bean放入Bean工厂,供其他组件使用。
9. 销毁方法:当Spring容器关闭时,会调用实现了`DisposableBean`接口的Bean的`destroy()`方法进行清理工作。
### SpringBean的作用域
Spring提供了多种Bean的作用域:
- singleton:默认作用域,Spring容器中只会存在一个Bean实例,所有对这个Bean的请求都将返回同一个对象。
- prototype:每次请求都会创建一个新的Bean实例,适用于需要多个实例的情况。
- request:在Web应用中,每个HTTP请求都会创建一个新的Bean实例,只在当前请求范围内有效。
- session:每个HTTP session中有一个Bean实例,适用于需要跨多个请求共享状态的场景。
- global-session:在portlet应用中,全局session作用域,但Spring 5已不再支持。
### Spring支持的数据库事务传播行为
Spring定义了七种事务传播行为:
- PROPAGATION_REQUIRED:默认行为,如果当前有事务,就加入,如果没有就新建一个。
- PROPAGATION_SUPPORTS:如果当前有事务,就加入,如果没有就不开启事务。
- PROPAGATION_MANDATORY:如果当前有事务,就加入,如果没有,则抛出异常。
- PROPAGATION_REQUIRES_NEW:总是新建一个事务,如果当前有事务,先暂停当前事务。
- PROPAGATION_NOT_SUPPORTED:总是不使用事务,如果当前有事务,就暂停。
- PROPAGATION_NEVER:总是不使用事务,如果当前有事务,就抛出异常。
- PROPAGATION_NESTED:如果当前有事务,就在当前事务中嵌套一个新事务;如果没有,则新建一个事务。
### 事务的隔离级别
隔离级别是确保并发操作之间数据一致性的重要手段:
- ISOLATION_DEFAULT:使用数据库默认的隔离级别,如MySQL的`REPEATABLE_READ`,Oracle的`READ_COMMITTED`。
- ISOLATION_READ_UNCOMMITTED:最低级别,允许读未提交数据,可能导致脏读、幻读、不可重复读。
- ISOLATION_READ_COMMITTED:防止脏读,但可能出现幻读和不可重复读。
- ISOLATION_REPEATABLE_READ:防止脏读和不可重复读,但可能出现幻读。
- ISOLATION_SERIALIZABLE:最高级别,完全串行化,防止所有并发问题,但性能最低。
了解这些知识点对于理解Spring的工作原理和处理并发控制至关重要,是Java开发人员面试中常见的问题。
2022-07-11 上传
2022-11-18 上传
2019-07-23 上传
2023-06-14 上传
2024-12-28 上传
2024-12-28 上传
2024-12-28 上传
老歪不歪
- 粉丝: 59
- 资源: 4367
最新资源
- ES2015:ES2015片段和简短说明
- Android-ListViewDemo.zip_android开发_Java_
- torch_sparse-0.6.11-cp37-cp37m-win_amd64whl.zip
- tinyusb-sys:Rust FFI绑定到tinyusb USB堆栈
- Page Marker-crx插件
- dndhelper:DM的简单工具
- Tea.zip_加密解密_C#_
- 一文彻底搞懂快速幂(原理实现、矩阵快速幂)
- angular-reactions:BuzzfeedOnedio风格的用户React模块作为AngularJS框架的指令
- SpringCloud学习.zip
- BtoBdigitaleconomy
- microfrontend-event-bus
- torch_scatter-2.0.7-cp37-cp37m-macosx_10_9_x86_64whl.zip
- QuantResearchDev:定量加密机器人程序框架
- chatterbox-client
- Timed-rounds-alarm-program.rar_LabView编程_LabView_