框架常见问题(Spring and Mybatis)

Spring框架中的单例bean?
- 概念:在 Spring 框架中,Bean 是指由 Spring IoC 容器管理的对象。通俗地说,只要是被 Spring 管理的对象,都可以叫 Bean。
Spring bean 是单例的,bean在Spring IOC容器中只有一个实例。但单例bean不是线程安全的。
一般在spring的bean中都是注入无状态的对象没有线程安全问题,但是如果在bean中定义了可修改的成员变了,那就需要考虑线程安全问题了。
Spring框架中的单例bean是线程安全的吗?
什么AOP,项目中如何使用AOP?
- 概念: AOP是面向切面编程:用于将那些业务无关但却对多个对象产生影响的公共行为和逻辑,抽取封装为可重用的模块(切面)。
- 作用: 降低模块间的耦合,提高系统的可维护性。
- 场景: 记录操作日志、缓存处理、Spring内置的事务处理
Spring中的事务是如何实现的?
两种实现方式:
- 编程式事务控制:对业务代码有侵入性,项目中很少用。
- 声明式事务: 本质是利用AOP完成的。它对方法前后进行拦截,在执行方法前开启事务,在执行完目标方法后根据执行情况提交或回滚事务。
事务失效的场景有哪些?
- 异常捕获处理
事务通知捕捉到目标抛出的异常才会进行后续的回滚处理,如果自己处理异常,没有抛出。那么事务通知无法知悉。
解决:(手动抛出) 在catch 块中加入throw new RuntimeException(e)抛出 - 抛出检查异常
Spring 默认只回滚非检查异常
解决:需配置rollbackfor属性 - 非public方法
因为Spring为方法创建代理,添加事务通知,其前提条件都是该方法是public的。

浙公网安备 33010602011771号