Java Spring MVC。是否可以通过调用 "new" 来覆盖单例(或会话)范围的 bean?

Java Spring MVC. Is this possible to overwrite singleton (or session) scoped bean by calling "new"?

我正在通过尝试创建一个简单但实​​用的网页来学习 Spring MVC 框架。

我想知道是否可以通过调用 "new" 运算符来覆盖会话 bean...

我已经创建了引用当前用户的会话范围 bean。如果用户未登录,默认 bean 将与访客参数一起使用。

<bean id="currentUser" class="pl.home.models.User" scope="session"> <aop:scoped-proxy /> </bean>

然后,在我的控制器中,我输入了以下代码:

@Autowired @Qualifier("currentUser") protected User user;

当用户尝试登录时,我想通过调用覆盖用户实例:

user = new User(email, password);

以上代码只会覆盖用户实例 "locally"。 Spring 容器内的 bean 实例将保持不变。

是否可以覆盖 Spring 容器中的用户实例?或者我的方法完全错了?

谢谢,Mariusz

基本上我通过 Java EE 解决了它 HttpSession 你可以使用相同的方法。用户登录成功后创建一个 currentUser 对象并将其设置为 HttpSession,如下所示:

public void loginPost(HttpServletRequest request){
     //After sucessfull login
     User currentUser=initializeCurrentUser();
     HttpSession session=request.getSession();
     session.setAttribute(SessionToken.NAME, currentUser);
}

如果不是登录,则使用默认用户设置初始化 currentUser 并设置为会话。如果你想知道 clusterring 你可以将这个 currentUser 保存到 db 并将 recordId 设置为 session 并在需要时查询它。