gpt4 book ai didi

java - 为什么我的 Spring session 作用域 bean 在 session 之间共享?

转载 作者:行者123 更新时间:2023-12-01 10:03:48 33 4
gpt4 key购买 nike

我有一个简单的 pojo UserQuota,其中有 1 个字段 quota:

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public interface UserQuota {
public int getQuota();
public void setQuota(int quota);
}

现在,我使用两个不同的浏览器窗口(firefox 和 chrome)以两个不同的用户身份登录我的 Web 应用程序。令我惊讶的是,当我从一个 session 设置配额值(使用 setQuota)时,新值可用于另一个 session (当调用 getQuota 时)。我期望每个用户 session 都有自己的 bean 实例;这不是 Spring 中的 session 作用域 bean 的用途吗?

我一定是错过了什么。可能是什么?

编辑:

实现类如下所示:

@Component
public class UserQuotaImpl implements UserQuota {

private int quota;

/**
* @return the quota
*/
public int getQuota() {
return quota;
}

/**
* @param quota the quota to set
*/
public void setQuota(int quota) {
this.quota = quota;
}

}

最后,这是我如何使用 session bean:

@Component
public class UserQuotaHandler {

@Autowired
private UserQuota userQuota;

public void checkAndUpdateQuota() {
int quota = userQuota.getQuota();

// i use my business logic to decide whether the quota needs an update
if(myBusinessLogic) {
userQuota.setQuota(someNewValue);
}
}

}

我在 xml 配置文件中使用 context:component-scan 。可能会注意到,我的大多数其他 Autowiring bean 都是单例 bean,它们似乎按预期工作

最佳答案

您需要使用 session @ScopeUserQuotaImpl(根据您的情况)来注释您的具体 bean 类。

Spring 会忽略具体类的任何父类(super class)或超接口(interface)上的@Scope。由于您的类型没有任何显式的 @Scope 注释

@Component
public class UserQuotaImpl implements UserQuota {

Spring 假设您打算将其设为单例 bean。

关于java - 为什么我的 Spring session 作用域 bean 在 session 之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609316/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com