如何在 Spring Boot 中的两个或多个 WebSocket 控制器之间共享一个对象?
How do I share an object between two or more WebSocket controllers in Spring Boot?
我有两个控制器,即ControllerA
和ControllerB
。在 ControllerA
中,我有一个对象 (a HashMap
),它将连接用户的主要名称映射到他们各自的用户名:
@Controller
public class ControllerA {
HashMap<String, String> principalToUsername = new HashMap<>();
...
}
我希望能够从 ControllerB
访问此对象,这是另一个 websocket 控制器:
@Controller
public class ControllerB {
private String getUsername(String principalName) {
// I want to access usernames here
}
}
我该怎么做?我读过的所有帖子都谈到了 MVC 控制器,我可以在其中使用 @SessionVariable
或 flash 属性。但是我如何使用 WebSocket 控制器完成相同的操作?
您可以创建一个额外的 @Component
来保留 HashMap<>
并将其自动连接到两个控制器中。请注意,默认情况下,这将由 Spring 应用程序中的所有控制器共享。
@Component
public class UserMap {
private final Map<String, String> map = new HashMap<>();
public String getUserName(String userName) {
return map.get(userName);
}
}
在控制器中;
private final UserMap userMap;
// autowire in constructor
public ControllerA(UserMap userMap) {
this.userMap = userMap;
}
private String getUsername(String principalName) {
userMap.getUserName(principalname);
}
我有两个控制器,即ControllerA
和ControllerB
。在 ControllerA
中,我有一个对象 (a HashMap
),它将连接用户的主要名称映射到他们各自的用户名:
@Controller
public class ControllerA {
HashMap<String, String> principalToUsername = new HashMap<>();
...
}
我希望能够从 ControllerB
访问此对象,这是另一个 websocket 控制器:
@Controller
public class ControllerB {
private String getUsername(String principalName) {
// I want to access usernames here
}
}
我该怎么做?我读过的所有帖子都谈到了 MVC 控制器,我可以在其中使用 @SessionVariable
或 flash 属性。但是我如何使用 WebSocket 控制器完成相同的操作?
您可以创建一个额外的 @Component
来保留 HashMap<>
并将其自动连接到两个控制器中。请注意,默认情况下,这将由 Spring 应用程序中的所有控制器共享。
@Component
public class UserMap {
private final Map<String, String> map = new HashMap<>();
public String getUserName(String userName) {
return map.get(userName);
}
}
在控制器中;
private final UserMap userMap;
// autowire in constructor
public ControllerA(UserMap userMap) {
this.userMap = userMap;
}
private String getUsername(String principalName) {
userMap.getUserName(principalname);
}