我正在使用Javalin开发Web应用程序。我有多个控制器类为我处理路由。假定每个控制器都与单个POJO / DB表类型相关联。因此,例如,我有一个Employee控制器,用于路由和显示与Employee POJO相关的页面。 Employee控制器(在后端)主要引用Employee Dao Service,然后查询数据库中的Employee表。到目前为止一切都很好,对吧?
我的问题是,我的某些前端页面必须包含其他表的详细信息,这意味着我正在Employee控制器内创建其他DAO服务的实例,例如,有时我还需要GroupDaoService和LocationDaoService,因为还显示了多个雇员页面组和位置信息。我想这会占用一些内存,因为每次加载不同的页面时,都会使用不同的DaoServices集。所以我的问题是,这些DaoServices应该是Singletons吗?拥有一个EmployeeDaoService是否有意义?这些不同的DaoService使用的基础数据库连接池类已经是Singleton。我应该在DaoServices中遵循相同的模式吗?
将我的DaoServices更改为Singletons在性能上有意义吗?
这是EmployeeController的示例部分,除了EmployeeDao之外,还需要实现3或4种其他类型的DAO,这就是引发此问题的原因。
` public static Handler serveUserDetails = ctx -> {
List<Integer> recCounts = mainSVC.getTotalRecords();
Map<String, Object> pdata = new HashMap();
String userID = ctx.pathParam(":id");
pdata.put("numEvents", recCounts.get(0));
pdata.put("numSites", recCounts.get(1));
pdata.put("numUsers", recCounts.get(2));
pdata.put("user", userSVC.getEmployee(Integer.parseInt(userID)));
pdata.put("groups", groupSVC.getGroups());
pdata.put("schedules", schedSVC.getSchedules());
pdata.put("webuser", W_EMP);
ctx.render("/templates/userdetail.vtl", pdata);
};`
答案 0 :(得分:1)
是的,这很有道理。服务通常是单例。我不会在一个节点上的Web应用程序中需要多个实例的充分理由。如果您使用Spring进行依赖项注入,则单例已经是默认范围。
当然,这假定服务是无状态的,即不保存会话或请求相关数据。