深度解析Java SSM框架面试关键点

需积分: 0 1 下载量 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开发人员面试中常见的问题。