Spring SSM面试关键知识点:生命周期、作用域与事务管理

需积分: 0 0 下载量 85 浏览量 更新于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框架掌握程度的重要标准。