Spring Boot:@Autowired 记住并为下一个请求保存相同的对象

我正在开发一个 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(new GetUserIdByUserNameOutput);


要么


GetUserIdByUserNameBase.getGetUserIdByUserNameOutput().setX(Null);

但在这里我创建了一个问题,因为我为每个新的 API 请求创建了一个新的“GetUserIdByUserNameOutput”实例,并且对系统来说效率不高且繁重......


如果我总结了我真正想知道的内容,我如何告诉@Autowired 在 API 的每个新请求上弹回/搁置对象,而不是使用或覆盖它从第一个请求中记住的内容。?


holdtom
浏览 195回答 1
1回答

三国纷争

在大多数情况下,Spring bean 不应该有状态。bean 是可重用的类的单个实例。不要使用二传手!而不是这样做:getUserIdByUserNameBase.setGetUserIdByUserNameInput(GetUserIdByUserNameInput);您需要在单个方法中进行计算,或者在 bean 中实例化一个新对象并返回新对象,例如return getUserIdByUserNameBase.getGetUserIdByUserName(GetUserIdByUserNameInput);或类似的东西return getUserIdByUserNameBase.buildUsernameThing(GetUserIdByUserNameInput).execute();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java