j'ai simple POJO UserQuota
avec 1 champ quota
en elle:pourquoi mon bean session scoped session de printemps est partagée entre les sessions?
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public interface UserQuota {
public int getQuota();
public void setQuota(int quota);
}
maintenant, j'ai utilisé deux fenêtres de navigateur différentes (Firefox et Chrome) pour se connecter à mon application Web que deux utilisateurs différents. à ma grande surprise, quand je fixe la valeur de quota (avec setQuota
) d'une session, la nouvelle valeur devient disponible pour l'autre session (quand getQuota
est appelée). je m'attendais à ce que chaque session d'utilisateur ait sa propre instance de bean; N'est-ce pas ce que la session est la fève au printemps?
Il me manque quelque chose. Qu'est ce que ça pourrait être?
modifier:
la classe de mise en œuvre ressemble à ceci:
@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;
}
}
et enfin voici comment j'utiliser la fève de session:
@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);
}
}
}
J'utilise context:component-scan
dans ma config xml fichier. on peut noter que la plupart de mes autres haricots autowired sont des haricots singleton qui semblent avoir fonctionné comme prévu
Veuillez montrer comment vous injectez et utilisez le grain. – Savior
J'ai mis à jour ma question comme demandé – Tanvir
Où est la classe d'implémentation? Vous aurez envie d'annoter cela avec le '@ Scope', pas l'interface, afaik. – Savior