SpringBean作用域与事务管理面试题解析

需积分: 0 0 下载量 29 浏览量 更新于2024-08-03 收藏 1.37MB DOCX 举报
"Java SSM面试题涉及到Spring框架的核心概念,包括SpringBean的作用域和Spring支持的数据库事务传播属性及隔离级别。" 1、SpringBean的作用域 在Spring框架中,`SpringBean`的作用域决定了对象的生命周期和共享程度。主要有以下几个作用域: - **Singleton(单例)**: 这是默认作用域,Spring会确保每个容器中只有一个bean实例,无论多少次请求该bean,都会返回相同的实例。bean在容器启动时被创建,之后的每次请求都复用同一个对象。 - **Prototype(原型)**: 在这种作用域下,每次通过容器请求bean时,都会创建一个新的实例。这意味着,如果一个bean被配置为原型作用域,那么在每次服务请求时,如通过`ApplicationContext.getBean()`,都会返回一个新的bean对象。 2、Spring支持的数据库事务传播属性 事务传播属性定义了在一个事务方法被另一个事务方法调用时的行为,Spring提供了七种不同的传播行为: - **Propagation.REQUIRED**: 默认行为,如果调用者在一个事务中,那么被调用的方法也将在同一个事务中运行;如果没有事务,则会新建一个。 - **Propagation.REQUIRES_NEW**: 不论调用者是否在事务中,被调用的方法总是会开启一个新的事务,并且当前事务会被挂起(如果有的话)。 除此之外,还有其他的传播行为,如`Propagation.SUPPORTS`(如果已有事务则支持,没有则不开启)、`Propagation.MANDATORY`(如果调用者在事务中则参与,否则抛出异常)、`Propagation.NOT_SUPPORTED`(不支持事务,如果有事务则挂起)、`Propagation.NEVER`(永不参与事务,如果在事务中则抛出异常)以及`Propagation.NESTED`(嵌套事务,如果存在事务则在嵌套事务内执行,否则行为类似`REQUIRED`)。 3、事务的隔离级别 数据库事务的隔离级别用于控制并发事务间数据的一致性和可见性,Spring中的`isolation`属性可以设置这些级别,常见的有: - **Isolation.REPEATABLE_READ**: 可重复读,允许读取期间,其他事务不能修改已读数据,但可能出现不可重复读问题(读到已提交的更新)。 - **Isolation.READ_COMMITTED**: 读已提交,只保证每次读取的记录都是事务提交后的最新状态,但可能出现脏读和不可重复读。 除此之外,还有`Isolation.DEFAULT`(根据数据库默认设置)和`Isolation.SERIALIZABLE`(序列化,最严格的隔离级别,避免所有并发问题,但性能开销大)。 事务隔离级别与并发问题: - **脏读**:一个事务读取到另一个事务未提交的修改,如果后者回滚,脏读的数据就是无效的。 - **不可重复读**:在同一个事务内多次读取同一数据,可能会有不同的结果,因为其他事务已经提交了修改。 - **幻读**:在同一个事务内,两次同样的查询可能返回不同的行数,因为其他事务插入了新的行。 了解并掌握这些基本概念对于Java开发者,尤其是从事SSM(Spring、SpringMVC、MyBatis)框架的开发者来说至关重要,因为它们直接影响到应用的稳定性和数据一致性。在实际开发中,合理设置bean的作用域、事务传播属性和隔离级别,能够有效解决并发问题,提高系统的性能和可靠性。