spring中 单例模式和原型模式的区别、controller是单例多例的问题


简单说来,单例就是用的一个对象。 原型就是拷贝的这个对象。

单例模式和原型模式多次调用hashcode相同么

单例模式多次调用hashcode是相同的。
原型模式多次调用hashcode是不同的。

如何在spring中验证原型模式hashcode不同

在2个类中,分别注入一个原型模式的对象,打印hashcode就可以看出来。
注: 一个类中是看不出来的,因为一个类中注入的时候只调用一次。

有个需求,当每次调用这个对象的时候,生成一个新日期,用bean的形式好么

这个要区分下情况。
如果this.date=new Date(); 写在构造器里是不好用的,因为bean只加载一次。 这个new Date()只在spring创建对象的时候执行一次。 所以一直不变。

解决方案:
可以把this.date=new Date(); 写在一个方法里,然后再返回该bean对象,方法每次调用都会执行一遍逻辑,所以date会变化。

问题 controller是单例还是多例

曾听有人问过这么个问题,controller是单例还是多例?
答:单例
您是怎么认为单例模式下支持那么多并发请求的?
。。。

是不是不太好答。
其实这个问题有点混淆,单例和多例,同步和异步,线程和并发概念要搞清楚。

答:我们一点点理,概念没弄清楚吧。
先说同步和异步,controller默认是同步的,即请求后会等待响应。当然也可以加@Async注解设置成异步。
并发和单例和多例有什么关系? 在没有全局变量的情况下,根本没任何影响。
单例就是只创建一个实例,所有请求共享这个实例。
多例就是每次请求都创建一个新的实例。

那么单例方法会慢吗?会阻塞吗?
想什么呢,当然不会阻塞,这里又涉及到方法的运行和堆栈。
方法运行时会创建栈和堆。
栈存放简单数据,堆存放大的对象。
每个进程对应一串栈帧。每个方法对应一个栈帧。
在没有共享数据的情况下,方法的执行都是独立的,不需要互相等待,当然也不会阻塞。

注:controller的问题感觉i应该放在spring栏,但是spring这个话题更大,不太好确定放在哪个文章里,就放到这吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值