SpringBean什么时候用单例模式什么时候用多例?
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBean什么时候用单例模式什么时候用多例?相关的知识,希望对你有一定的参考价值。
SpringBean单例与多例
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)
单例多例 | 说明 |
---|---|
singleton(单例) | 只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。 |
prototype(多例) | 对这个bean的每次请求都会创建一个新的bean实例,类似于new。 |
Spring bean 默认是单例模式。
那什么时候用单例?什么时候用多例?
当对象含有可改变状态时(在实际应用中该状态会改变),则多例,否则单例。
例如dao和service层的数据一般不会有响应的属性改变,所以考虑单例,而controller层会存储很多需要操作的vo类,此时这个对象的状态就会被改变,则需要使用多例
怎么用
配置单例与多例
配置单例:在bean时,加一个scope = “singleton”;如果不写个默认是true,也就是单例的,写了就是多例的
<bean id="hello" class="com.test.Hi" init-method="init" scope="singleton">
配置多例:
<bean id="hello" class="com.test.Hi" init-method="init" scope="prototype">
spring的bean为什么默认是单例的?
- 为了提高性能。
- 由于不会每次都新创建新对象,所以就减少了新生成实例的消耗。因为spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。
- 减少JVM垃圾回收,由于不会给每个请求都新生成bean实例,所以自然回收的对象少了。
- 可以快速获取到bean,因为单例的获取bean操作除了第一次生成之外其余的都是从缓存里获取的所以很快。
缺点就是在并发环境下可能会出现线程安全问题
以上是关于SpringBean什么时候用单例模式什么时候用多例?的主要内容,如果未能解决你的问题,请参考以下文章