老师后面说的dao,service,controller正常使用单例的,具体怎么理解呢?为什么呢?

老师后面说的dao,service,controller正常使用单例的,具体怎么理解呢?为什么呢?

老师后面说的dao,service,controller使用单例的,具体怎么理解呢?为什么呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好

同学可以这里理解一下,

dao,service,controller,最基本的就是在使用它们的对象来调用方法,不涉及属性值的修改,只需要一个对象来调用方法即可,没有必要使用多例,同学可以联想一下,我们前边的课程在循环中使用Scanner对象的时候,我们只创建一个Scanner对象来调用方法即可。

而实体类基本是用new的方式来创建或者在Spring中设置多例的形式。

例如,有一个实体类User ,它涉及到一些属性值的设置修改,这个情况下,它就不适合用单例了,因为如果只有一个User对象,大家都去操作它的属性值,就会引发线程安全问题,也是不合理的。

所以,例如dao,service,controller,以及工具类,等不涉及数据的存储,属性赋值的,而是只是用一个对象来调用方法的,建议使用单例模式。

而实体类我们一般就用多例,或者直接用new的方式来创建,避免产生线程安全问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • rock221 #1

    老师,看了您的回答,有一个疑问, 如果多个用户同时发出请求,更新数据,那必然要通过dao类与数据库交互阿, 这时候dao类是单例, 不就会出现用户1发出更新请求,用户2也发出更新请求,用户3获取数据,都是用一个dao对象,那不是会出现线程吗?? 如果dao出现了线程安全, 获取到不同步的数据,那么service也会受影响了吧。 

    2021-05-18 20:41:53
  • rock221 #2

    老师,看了您的回答,有一个疑问, 如果多个用户同时发出请求,更新数据,那必然要通过dao类与数据库交互阿, 这时候dao类是单例, 不就会出现用户1发出更新请求,用户2也发出更新请求,用户3获取数据,都是用一个dao对象,那不是会出现线程吗?? 如果dao出现了线程安全, 获取到不同步的数据,那么service也会受影响了吧。 

    2021-05-18 20:42:11
  • 同学你好,同学可以给Service或dao层 加事务管理,加锁等方式来控制线程安全,这样service有了线程安全的保障的话,dao层也就相当于线程安全了,另外,其实dao层如果不存储数据,不会有太大问题,单例模式的线程不安全可以理解为修改同一变量了,  比如 dao有一个属性 data,大家都去修改它,那么可能就会造成线程安全问题了,而dao一般只是提供对数据库的访问方法就没事,而且数据库也有自己的事务机制,例如,锁表,行锁等。

    2021-05-19 09:51:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师