Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导如何处理通过singleton类发出的请求?_Java_Spring Boot_Singleton - Fatal编程技术网

Java Spring引导如何处理通过singleton类发出的请求?

Java Spring引导如何处理通过singleton类发出的请求?,java,spring-boot,singleton,Java,Spring Boot,Singleton,我目前正在开发一个类结构,为每个RequestMapping使用单例类。我知道Spring(默认情况下)以多线程的方式处理请求,但我只想确保我现在所规划的最终将以我预期的方式工作 此外,例如,如果我发出请求,singleton类将创建内存中的数据库。对于来自同一用户/客户机的连续请求,下一个请求是否能够使用以前存储的任何信息,或者当响应被发送回时,请求的Spring容器是否被销毁(各种各样),并在新请求上重新创建 最后,如果为了这个目的创建一个单例类在任何方面都是不好的做法,我愿意接受任何建议。

我目前正在开发一个类结构,为每个RequestMapping使用单例类。我知道Spring(默认情况下)以多线程的方式处理请求,但我只想确保我现在所规划的最终将以我预期的方式工作

此外,例如,如果我发出请求,singleton类将创建内存中的数据库。对于来自同一用户/客户机的连续请求,下一个请求是否能够使用以前存储的任何信息,或者当响应被发送回时,请求的Spring容器是否被销毁(各种各样),并在新请求上重新创建

最后,如果为了这个目的创建一个单例类在任何方面都是不好的做法,我愿意接受任何建议。创建singleton类的最初目的是简单地让ScheduleManager类负责创建整个对象,这样,如果以后,如果我需要事先采取某些步骤来创建完整的ScheduleManager对象(例如,建立到数据库的连接),然后我就可以做到这一点,而不必为构造函数创建额外的参数,也不必让实现类(RequestController)负责创建这样的数据库连接

//RequestController.java的一部分
@RestController
公共类请求控制器{
私有静态最终字符串DATA_DIR=System.getProperty(“user.DIR”)+“/DATA/”;
私有静态最终记录器Logger=Logger.getLogger(RequestController.class);
@后期映射(value=“/generateSchedules”)
公共JsonObject scheduleRequest(@RequestBody JsonObject requestedClasses){
JSONObject request=gsonToJson(requestedClasses);
JSONObject response=ScheduleManager.getInstance().generateSchedules(请求);
返回jsonToGson(响应);
}
}
//单例类ScheduleManager的一部分
公共类ScheduleManager实现RequestManager{
私有静态ScheduleHandler;
专用ScheduleManager(){}
私有静态类ScheduleManagerHolder{
私有静态最终ScheduleManager实例=新ScheduleManager();
}
公共静态ScheduleManager getInstance(){
handler=ScheduleHandler.getInstance();
返回ScheduleManagerHolder.INSTANCE;
}
公共JSONObject生成计划(JSONObject请求){
handler.handlePost(请求);
List schedules=GoldPan.getInstance().generate();
JSONArray ScheduleSJSON=listToJsonArray(时间表);
JSONObject输出=新的JSONObject();
put(“schedules”,schedulesAsJson);
返回输出;
}
}

因此,我所期望的是,每个向RequestController发送请求的唯一客户端都将拥有自己的ScheduleManager singleton类的单独实体/容器,而不是在所有请求中共享一个ScheduleManager(有点像我心目中的标签“singleton”)。

首先,您的单例设计是错误的,例如,不需要递归调用
ScheduleManager#getInstance
。不过,这里的主要问题似乎是您混淆了IoC容器管理的内容。您的singleton类不是Springbean,因此不受它的管理。您只需创建并重新使用它。现在最好的问题是这是否是你真正需要的。例如,如果这个类将负责转换从请求传入的一些信息,那么是的,这是一个很好的方法,但是再说一遍,为什么不把它变成一个Springbean?@Aris_Kortex我想你看到的递归部分可能就是我糟糕的类名。内部调用是
ScheduleHandler#getInstance
(但是从那时起我重构了很多代码,这样就不存在了)。singleton类只负责接收
JSONObject请求
,将其放入Java对象中,然后对这些Java对象进行操作,创建一个新的
JSONObject响应
,并将其传递回控制器。至于SpringBean的东西,我对Spring和SpringBoot不太熟悉,但我会研究一下,看看这是否是我所需要的选项。@Aris_Kortex接下来的问题是,如果我的singleton类不是SpringBean,也不是由SpringIOC容器处理的,这是否意味着每个请求都将共享该类的同一个实例?i、 e.如果一个请求进入计划,它对成员字段进行了一些修改,然后在另一个请求进入计划后不久,它也对成员字段进行了修改,如果它还没有完全处理,它是否会覆盖第一个请求所做的修改?如果是这样,我肯定需要将我的类切换到Spring Bean首先,您的单例设计是错误的,例如,不需要递归调用
ScheduleManager#getInstance
。不过,这里的主要问题似乎是您混淆了IoC容器管理的内容。您的singleton类不是Springbean,因此不受它的管理。您只需创建并重新使用它。现在最好的问题是这是否是你真正需要的。例如,如果这个类将负责转换从请求传入的一些信息,那么是的,这是一个很好的方法,但是再说一遍,为什么不把它变成一个Springbean?@Aris_Kortex我想你看到的递归部分可能就是我糟糕的类名。内部调用是
ScheduleHandler#getInstance
(但是从那时起我重构了很多代码,这样就不存在了)。singleton类只负责接收
JSONObject请求
,将其放入Java对象中,然后对这些Java对象进行操作,创建一个新的
JSONObject响应
,并将其传递回控制器。至于春豆的事,我可不是那么想的