我是 Spring MVC 的新手,我对bean的会话范围有疑问。
进入一个项目,我有一个Cart
bean,这个:
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Cart {
private Map<Product, Integer> contents = new HashMap<>();
public Map<Product, Integer> getContents() {
return contents;
}
public Set<Product> getProducts() {
return contents.keySet();
}
public void addProduct(Product product, int count) {
if (contents.containsKey(product)) {
contents.put(product, contents.get(product) + count);
}
else {
contents.put(product, count);
}
}
public void removeProduct(Product product) {
contents.remove(product);
}
public void clearCart() {
contents.clear();
}
@Override
public String toString() {
return contents.toString();
}
public double getTotalCost() {
double totalCost = 0;
for (Product product : contents.keySet()) {
totalCost += product.getPrice();
}
return totalCost;
}
}
所以这个 bean 会被容器自动检测为组件,并通过以下方式将其设置为会话 bean:
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
因此,据我了解,这意味着它会为每个用户会话自动创建一个 bean。
在我的示例中,Cart
该类表示一个购物车,登录的用户将想要购买的物品放入其中。这是否意味着每个登录的用户部分都存在一个Cart
bean 到HttpSession
? 所以这个 bean 进入了会话,用户可以从中添加或删除项目。这种解释是正确的还是我错过了什么?
另一个疑问与proxyMode = ScopedProxyMode.TARGET_CLASS
属性有关。这到底是什么意思呢?为什么将其应用于此 bean?