我正在开发一个 Spring Boot 应用程序,例如在一个 API 下方:@AutowiredGetUserIdByUserNameBase getUserIdByUserNameBase;@PostMapping(value = "/UserName") public GetUserIdByUserNameOutput getUserIdByUserName(@RequestBody String userName) { GetUserIdByUserNameInput GetUserIdByUserNameInput = new GetUserIdByUserNameInput(userName); getUserIdByUserNameBase.setGetUserIdByUserNameInput(GetUserIdByUserNameInput); MsgStatus msgStatus = getUserIdByUserNameBase.execute(); if (msgStatus == MsgStatus.ERROR_MSG) { LOG.error("UserRestController,getUserIdByUserName : Internal System Error"); } return getUserIdByUserNameBase.getGetUserIdByUserNameOutput();}我的问题出现在具有相同 API 的第二个/下一个请求中(例如上面的那个)“GetUserIdByUserNameBase”仍然记得第一次点击时保存的所有数据!。public class GetUserIdByUserNameBase extends ServiceBase { private final Logger LOG = LogManager.getLogger(GetUserIdByUserNameBase.class); private GetUserIdByUserNameInput getUserIdByUserNameInput; private GetUserIdByUserNameOutput getUserIdByUserNameOutput; private ResultStatus resultStatus; private String userName; private TBUSER_INFO userInfo;在我的例子中,“getUserIdByUserNameOutput”仍然保存来自 API 的第一次命中的先前数据,直到我覆盖内容或将其标记为空。1 . GetUserIdByUserNameBase.setGetUserIdByUserNameOutput(new GetUserIdByUserNameOutput);要么GetUserIdByUserNameBase.getGetUserIdByUserNameOutput().setX(Null);但在这里我创建了一个问题,因为我为每个新的 API 请求创建了一个新的“GetUserIdByUserNameOutput”实例,并且对系统来说效率不高且繁重......如果我总结了我真正想知道的内容,我如何告诉@Autowired 在 API 的每个新请求上弹回/搁置对象,而不是使用或覆盖它从第一个请求中记住的内容。?
1 回答
三国纷争
TA贡献1804条经验 获得超7个赞
在大多数情况下,Spring bean 不应该有状态。bean 是可重用的类的单个实例。不要使用二传手!
而不是这样做:
getUserIdByUserNameBase.setGetUserIdByUserNameInput(GetUserIdByUserNameInput);
您需要在单个方法中进行计算,或者在 bean 中实例化一个新对象并返回新对象,例如
return getUserIdByUserNameBase.getGetUserIdByUserName(GetUserIdByUserNameInput);
或类似的东西
return getUserIdByUserNameBase.buildUsernameThing(GetUserIdByUserNameInput).execute();
添加回答
举报
0/150
提交
取消