Spring框架面试:Bean作用域与事务管理

需积分: 0 0 下载量 8 浏览量 更新于2024-08-03 收藏 1.37MB DOCX 举报
"Java SSM面试题涉及到Spring框架的核心概念,包括Spring Bean的作用域和Spring支持的数据库事务传播属性及隔离级别。" 1、SpringBean的作用域 在Spring框架中,`<bean>`元素的`scope`属性用于定义Bean的作用域,这直接影响到Bean的生命周期和实例化方式。Spring提供了多种作用域: - **Singleton(单例)**:这是默认作用域,Spring会确保在整个应用中只存在一个Bean实例。当IOC容器启动时,或者第一次请求该Bean时,Spring会创建Bean的实例并缓存,后续请求都会返回同一个实例。 - **Prototype(原型)**:在这种作用域下,每次通过容器请求Bean时,都会创建一个新的实例。这适用于需要多个实例的情况,如创建用户对象或会话对象。 其他作用域还包括: - **Request**:在Web应用中,每个HTTP请求创建一个Bean实例。 - **Session**:每个HTTP session对应一个Bean实例。 - **GlobalSession**:在portlet应用中,全局portlet session对应一个Bean实例。 - **Application**:对于ServletContext,只有一个Bean实例。 2、Spring支持的常用数据库事务传播属性 事务传播属性定义了在一个事务方法被另一个事务方法调用时的行为: - **Propagation.REQUIRED**:默认值,如果当前有事务,就在其内部运行,如果没有,就新建一个事务。 - **Propagation.REQUIRES_NEW**:总是新建一个事务,即使在已有事务内部调用,原事务会被挂起。 - **Propagation.SUPPORTS**:如果存在事务,则在其中运行,否则不开启事务。 - **Propagation.NOT_SUPPORTED**:不允许事务,如果有事务,也会被挂起。 - **Propagation.NEVER**:不能在事务内运行,如果在事务中调用,抛出异常。 - **Propagation.MANDATORY**:如果当前存在事务,就在其内运行,否则抛出异常。 - **Propagation.NESTED**:如果存在事务,那么在嵌套事务内运行,否则行为类似于REQUIRED。 3、事务隔离级别 数据库事务的隔离级别决定了并发操作如何相互影响,Spring支持以下几种隔离级别: - **Isolation.DEFAULT**:使用数据库默认的隔离级别。 - **Isolation.READ_UNCOMMITTED**:最低级别,允许脏读、不可重复读和幻读。 - **Isolation.READ_COMMITTED**:防止脏读,但允许不可重复读和幻读。 - **Isolation.REPEATABLE_READ**:防止脏读和不可重复读,但可能出现幻读,MySQL默认级别。 - **Isolation.SERIALIZABLE**:最高级别,防止脏读、不可重复读和幻读,但性能最低。 事务并发问题中的典型现象包括脏读、不可重复读和幻读,这些问题可以通过选择适当的隔离级别来解决。例如,选择`Isolation.READ_COMMITTED`可以避免脏读,但可能导致不可重复读;选择`Isolation.SERIALIZABLE`则可以完全避免这些问题,但可能增加锁竞争,降低并发性能。 总结来说,理解SpringBean的作用域以及事务传播属性和隔离级别对于Java开发者来说至关重要,它们是构建高效、可靠且并发安全的应用的基础。在实际开发中,根据业务需求选择合适的作用域和事务配置,可以有效管理资源,保证数据一致性,并优化应用性能。