请你谈谈Spring 框架中都用到了哪些设计模式?spring context?Spring框架中的单例bean是线程安全的吗? Spring如何处理线程并发问题?

1Spring 框架中都用到了哪些设计模式?

模式举例
工厂模式BeanFactory就是简单工厂模式的体现,用来创建对象的实例
单例模式Bean默认为单例模式
代理模式Spring的AOP功能用到了JDK的动态代理和CGLIB
模板方法用来解决代码重复的问题。比如jdbcTemplate
观察者模式一对多的依赖关系: 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新 ApplicationListener

2详细讲解一下核心容器(spring context应用上下文) 模块

在这里插入图片描述
在这里插入图片描述
context是基本的Spring模块,提供spring 框架的基础功能,BeanFactory是 任何以spring为基础的应用的核心。Spring 框架建立在context模块之上,它使Spring成为一个容器。讲解以下BeanFactory && ApplicationContext

3Spring框架中的单例bean是线程安全的吗?

不是,Spring框架中的单例bean不是线程安全的。spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。
实际上大部分时候 spring bean 无状态【不会保存数据】的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态【有数据存储功能】的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。

4Spring如何处理线程并发问题?

在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。

ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。

同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空间换时间”的方式

超链接ThreadLocal

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏作者

@Autowire

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值