java - Spring Boot - Web 应用程序上下文 Bean 范围
问题描述
我有一个A
作为豆类的课程。
public class A
{
// constructors
// properties
// getters and setters
}
春季启动配置:
@Configuration
public class AConfig{
@Bean
@Scope(scopeName = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public A getA() {
return new A();
}
}
我现在正在使用 WebSocket,我正在尝试为某些特定的 WebSocket 通道获取一个新的 A 类实例,假设我正在使用 WebSocket,id:1
那么我将拥有该 WebSocket 的 A 实例(某个地址),并且对于WebSocketid:2
我将拥有 A 的另一个实例(其他地址),并且可以跨应用程序拥有它。我怎样才能做到这一点?在这种情况下,我想我必须向服务器发送一些 ID 来识别我正在寻找的 spring bean。
解决方案
**我们应该使用构造函数参数而不是 Autowired 来使其松散耦合**
class MessageSocketDemo {
private A a;
public MessageSocketDemo(A a) {
this.a = a;
}
public MessageSocketDemo() {
a = new A("address");
}
}
class A {
String address;
public A(String add) {
address = add;
}
}
因此,当您创建 MessageSocketDemo 的对象时,您每次都会创建 A 的对象。或者将 A 的范围作为原型或请求,每次被询问时都会创建新的,以及创建 A 实例的查找方法
推荐阅读
- wordpress - 向所有博客页面添加操作
- android - Xamarin:如何在 OnPageFinished 中引用 ScrollView?
- python - PyQt5 将小部件大小设置为最小并修复
- node.js - 将 github 存储库设为私有后,Circle CI 安装失败
- go - 无法下载 Go with Visual Studio 所需的分析工具
- ms-access - MS Access - 四岁生日后的日期
- r - 使用 vars 函数重命名 dplyr 中的列时出现字符向量错误
- c++ - C ++如何在地图中打印最多输入的单词
- java - 如何解决有关此代码的 java.lang.OutOfMemoryError
- c - 在 C 中实现拼写检查器:Valgrind 报告内存错误