首页 > 解决方案 > 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。

标签: javaspringspring-bootwebsocketjavabeans

解决方案


**我们应该使用构造函数参数而不是 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 实例的查找方法


推荐阅读