Java - 业务服务,数据访问对象 - 是否应该使用单例?

时间:2010-12-06 10:27:20

标签: java singleton

考虑具有业务层和数据访问层的Web应用程序。因此,每个请求都必须通过这两个层才能得到处理。

由于会有频繁的请求进入,因此创建新的业务和数据访问对象来处理每个请求是不明智的。在这种情况下,通常我倾向于选择业务单身人士和DAO。

但是我听到很多使用Singleton模式的问题,因为许多人反对这种模式(主要是因为它的全局)。在这种情况下,我上面描述的场景的正确设计策略是什么?

3 个答案:

答案 0 :(得分:3)

服务对象应为Singleton。

您可以使用Spring为您维护单件服务对象。

答案 1 :(得分:2)

在这种情况下使用的通常策略是将业务服务和数据访问对象而不是编写为单例,而不是简单的POJO。然后使用容器来管理类的范围。容器的一些例子是Spring和Guice。如果您的要求很简单,您甚至可以编写自己的容器。

通过这种方式,您可以获得单例模式的好处而没有其缺点(难以模拟和测试等)。

一个简单的例子:

public class PersonService {
    public Person getPerson(String id) {
        //find and return the person
    }
}

public class PersonServiceSingletonFactory {
    private PersonService service = new PersonService();
    PersonService getInstance() {
        return service;
    }
}

答案 2 :(得分:0)

我不认为在Servlet上编写单例是个好主意,你可以在ServletContextListener上创建业务逻辑,它将确保只有一个对象实例将在容器中运行并且它是线程安全的。你可以通过@ abhin4v解释的方式访问它。除非您使用的是Spring框架,否则这就是您需要做的事情。

希望它有所帮助。