我正在开发一个spring boot应用程序,下面是一个API,例如:
@Autowired
GetUserIdByUserNameBase 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(新的GetUserIdByUserNameOutput);
或
但在这里我创建了一个问题,因为我为每个新的API请求创建了一个新的“GetUserIdByUserNameOutput”实例,并且对系统来说效率不高且繁重...
如果我总结了我真正想知道的内容,我如何告诉@Autowired在API的每个新请求上跳转/静止对象,而不使用或覆盖它从第一个请求中记住的内容。?
以下是我的完整代码:
package com.usermanagementms.ims.servicesfacade.userservices;
import javax.transaction.Transactional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.usermanagementms.ims.enums.MsgStatus;
import com.usermanagementms.ims.repositories.userdao.TBUserInfoDao;
import com.usermanagementms.ims.tables.user.TBUSER_INFO;
import com.usermanagementms.ims.types.commontypes.ResultStatus;
import com.usermanagementms.ims.types.getuseridbyusername.GetUserIdByUserNameInput;
import com.usermanagementms.ims.types.getuseridbyusername.GetUserIdByUserNameOutput;
import com.usermanagementms.ims.utils.ErrorMsg;
import com.usermanagementms.ims.utils.ErrorsController;
import com.usermanagementms.ims.utils.Utils;
@Service
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;
@Autowired
private TBUserInfoDao TBUserInfoDao;
@Autowired
private ErrorsController errorsController;
@Transactional
public TBUSER_INFO getUserIdByUserName(String username) {
TBUSER_INFO userInfo;
try {
userInfo = TBUserInfoDao.findIdByUserName(username);
if (userInfo == null) {
LOG.warn("UserService,getUserIdByUserName : userInfo is empty");
return null;
}
return userInfo;
} catch (Exception e) {
LOG.error("UserService,getUserIdByUserName : error in retrieving user from DB { " + e.getMessage() + "}");
}
return null;
}
@Override
public MsgStatus inputMapping() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
this.setGetUserIdByUserNameOutput(new GetUserIdByUserNameOutput());
if (getResultStatus() == null) {
this.setResultStatus(new ResultStatus());
}
msgStatus = super.inputMapping();
if (msgStatus == MsgStatus.ERROR_MSG || this.getUserIdByUserNameInput == null) {
LOG.error("GetUserIdByUserNameBase,inpuMapping() : Internal System Error");
this.getErrorsController().fillResultStatus(ErrorMsg.SYSTEM_ERROR, this.resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
this.setUserName(getUserIdByUserNameInput.getUserNameX1());
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus validate() {
if (Utils.isNullorEmpty(userName)) {
LOG.error("GetUserIdByUserNameBase,validate() : userName is null or empty");
this.getErrorsController().fillResultStatus(ErrorMsg.REQUEST_BODY_EMPTY, this.resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus executeImpl() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
TBUSER_INFO userInfo = getUserIdByUserName(userName);
this.setUserInfo(userInfo);
if (userInfo == null) {
msgStatus = this.getErrorsController().fillResultStatus(ErrorMsg.USER_NOT_FOUND, resultStatus);
if (msgStatus == MsgStatus.ERROR_MSG) {
this.getErrorsController().fillResultStatus(ErrorMsg.SYSTEM_ERROR, resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
LOG.error("GetUserIdByUserNameBase,executeImpl() : Internal System Error");
return MsgStatus.ERROR_MSG;
}
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.ERROR_MSG;
}
this.getErrorsController().fillResultStatus(ErrorMsg.OK, resultStatus);
this.getGetUserIdByUserNameOutput().setResultStatus(resultStatus);
return MsgStatus.SUCCESS_MSG;
}
@Override
public MsgStatus outputMapping() {
this.getGetUserIdByUserNameOutput().setUserId(this.getUserInfo().getUid());
return MsgStatus.SUCCESS_MSG;
}
public GetUserIdByUserNameInput getGetUserIdByUserNameInput() {
return getUserIdByUserNameInput;
}
public void setGetUserIdByUserNameInput(GetUserIdByUserNameInput getUserIdByUserNameInput) {
this.getUserIdByUserNameInput = getUserIdByUserNameInput;
}
public GetUserIdByUserNameOutput getGetUserIdByUserNameOutput() {
return getUserIdByUserNameOutput;
}
public void setGetUserIdByUserNameOutput(GetUserIdByUserNameOutput getUserIdByUserNameOutput) {
this.getUserIdByUserNameOutput = getUserIdByUserNameOutput;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public ErrorsController getErrorsController() {
return errorsController;
}
public void setErrorsController(ErrorsController errorsController) {
this.errorsController = errorsController;
}
public ResultStatus getResultStatus() {
return resultStatus;
}
public void setResultStatus(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
public TBUSER_INFO getUserInfo() {
return userInfo;
}
public void setUserInfo(TBUSER_INFO userInfo) {
this.userInfo = userInfo;
}
}
public class GetUserIdByUserNameOutput {
private Long UserId;
private ResultStatus resultStatus;
public GetUserIdByUserNameOutput() {
}
public GetUserIdByUserNameOutput(Long userId, ResultStatus resultStatus) {
super();
UserId = userId;
this.resultStatus = resultStatus;
}
public GetUserIdByUserNameOutput(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
public Long getUserId() {
return UserId;
}
public void setUserId(Long userId) {
UserId = userId;
}
public ResultStatus getResultStatus() {
return resultStatus;
}
public void setResultStatus(ResultStatus resultStatus) {
this.resultStatus = resultStatus;
}
}
如果您查看此方法:
public MsgStatus inputMapping() {
MsgStatus msgStatus = MsgStatus.SUCCESS_MSG;
this.setGetUserIdByUserNameOutput(new GetUserIdByUserNameOutput());
我开始创建“new GetUserIdByUserNameOutput()”,每次请求相同的API,我想,对于系统来说,在经过一些时间之后创建大量GetUserIdByUserNameOutput实例是不够高效和沉重的。。。
在大多数情况下,春豆不应该有状态。bean是可重用的类的单个实例。不要使用setters!
而不是这样做:
getUserIdByUserNameBase。setGetUserIdByUserNameInput(GetUserIdByUserNameInput)
您需要在单个方法中进行计算,或者可能在bean中实例化一个新对象并返回新对象,例如。
return getUserIdByUserNameBase.getGetUserIdByUserName(GetUserIdByUserNameInput);
或者类似的
return getUserIdByUserNameBase.buildUsernameThing(GetUserIdByUserNameInput).execute();
背景:对于我的用户,我需要存储一对相同的对象类型(设置),目前我有它像 我正在创建带有设置的KeyValueTypes,并将其添加到列表中(每个用户都有一个列表)。我的设置有一个值字段(它显示了它们是否比其他设置“更重要”),所以我希望基于该字段添加它们,稍后我还需要基于该字段(可能还需要基于名称字段)进行搜索--所以搜索将不得不在列表中查找,然后在KeyValueTypes中查找 问题:什么是最
当我保存以下实体时,它在另一个对象中复制相同的值: 例如,在我的struts项目(屏幕)中,如果我更改shipmentShipper字段的值,那么Shipment收货人也将使用相同的值进行更新。 实体: 仓库类: JSP中的字段映射(工作正常): 请检查屏幕截图,我将发货人更改为C4并保存。收货人也被选为C4。请注意,两个选择都使用相同的数据列表填充。(客户名单)
本文向大家介绍两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?相关面试题,主要包含被问及两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?时的应答技巧和注意事项,需要的朋友参考一下 不对,两个对象的 hashCode() 相同,equals() 不一定 true。 代码示例: 执行的结果: str1:1179395 |
问题内容: 我试图将数据库表保存在班级 学生* 的 ListArray 中。 * 在while循环中,当我尝试将数据打印为 它打印完美。但是当我尝试将其打印为 它打印从数据库读取的最后一条记录。记录数相同。如果在数据库表中保存了4行,那么显示的记录也将是4次。 我使用LIST的方式有问题吗?谢谢! 问题答案: 更改为 您是,因为您创建 了。您必须在数据库中添加等于。因此,创建如下。 使用
我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例: Hibernate:在作者(名字、姓氏)中插入值(?,) Hi
我有这两个类,它们都有一个项目列表,我试图返回一个新对象“ItemWithDiscount”,它具有这两个类的属性,这在服务/控制器申请中。我尝试用流映射它们,但没能做到。谁能给我一个简单的方法来做这件事吗?