道不会拥有任何状态,这是毫无疑问的。
但是,为了最容易地访问该类,使用原型(=每次都新建)还是单例更好?
简单的对象创建对于 dao 来说很便宜。它通常只拥有一个 sessionfactory,从单例列表中访问对象可能同样昂贵。
澄清:这个问题的重点是,如果对 daos 的范围界定有一个共同的约定。
道不会拥有任何状态,这是毫无疑问的。
但是,为了最容易地访问该类,使用原型(=每次都新建)还是单例更好?
简单的对象创建对于 dao 来说很便宜。它通常只拥有一个 sessionfactory,从单例列表中访问对象可能同样昂贵。
澄清:这个问题的重点是,如果对 daos 的范围界定有一个共同的约定。
如果您的问题是关于架构的,我会将 DAO 范围限定为您正在执行的工作单元或事务。这减少了交叉事务污染和线程问题的可能性。
如果您的问题是关于性能的,那么答案就在分析器中,它可以为您的特定工作负载提供准确的数字。
或者将原型与池结合使用,如下所述:
或者在这里:
编辑:显然,我假设这里使用了弹簧。否则我道歉
我得出的结论是,没有“完美”的方式来决定这一点。单例范围很可能是在 Web 应用程序中执行此操作的错误方式,因为您将有不同的会话 - 每个请求一个。所以在 webapp 中 - 请求范围可能是正确的答案,但前提是您仅在请求中而不是在后台任务中使用它。原型范围是可行的——但前提是你没有在那里保存复杂的数据。