Я новичок в Spring MVC, и у меня есть сомнения по поводу области сеанса компонента.
В проекте у меня есть bean-компонент Cart
, вот этот:
@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;
}
}
Таким образом, этот компонент автоматически определяется контейнером как компонент и устанавливается как сессионный компонент:
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
Итак, насколько я понимаю, это означает, что автоматически создается один компонент для каждого сеанса пользователя.
В моем примере класс Cart
представляет собой корзину для покупок, в которую зарегистрированный пользователь помещает товары, которые хочет купить. Означает ли это, что существует один bean-компонент Cart
для каждого зарегистрированного пользовательского раздела в HttpSession
? Таким образом, этот компонент находится в сеансе, и пользователь может добавлять или удалять элементы из него. Верна ли эта интерпретация или я что-то упускаю?
Еще одно сомнение связано с атрибутом proxyMode = ScopedProxyMode.TARGET_CLASS
. Что именно это означает? Почему он применяется к этому бобу?