Spring中的dao和service是单例还是非单例,为什么?

如题所述

Spring的IOC容器中的对象默认都是单例的。当然也可以将其改为不是单例的。在xml文件中通过<bean>的属性scope="prototype"可以改为非单例的,使用注解的话,@Scope("prototype")。具体某个对象是否应该被设置为单例的,取决于它的作用。比如service, 用于调用dao, 整个系统中一个模块就只需要一个一个,没有必要再每次使用的时候都去new, 所以应该使用单例。同理dao也是如此。但是Spring中的单例模式和pojo的单例并不一样。追问

有的人说根据bean是否有状态来定义是否为单例,service中有dao的注入,属于service的属性,所以应该定义为非单例,bean的有无状态是根据什么区分的,是根据是否有属性吗

有的人说根据bean是否有状态来定义是否为单例,service中有dao的注入,属于service的属性,所以应该定义为非单例,bean的有无状态是根据什么区分的,是根据是否有属性吗

追答

事实上你会发现,dao基本都是单例的。因为dao一旦创建之后,完全没有必要对它进行修改,就是用于CRUD的。bean的由无状态的区分:http://blog.sina.com.cn/s/blog_796c73ba0101tv3s.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-10-10
spring生成对象默认是单例的。通过scope属性可以更改为多例。

<bean id="user" class="modle.User" scope="prototype">
</bean>

注解方式的话可以在在注解上生命单利多例本回答被网友采纳
相似回答