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操作除了第一次生成之外其余的都是从缓存里获取的所以很快。

缺点就是在并发环境下可能会出现线程安全问题

猜你喜欢

转载自blog.csdn.net/weixin_45525272/article/details/126090240