[英]Why Spring @Autowired inject another objecjt?
我正在使用Spring Boot v1.5.8.RELEASE。
我定義了一個WebSocketHandler
,其中保存了會話列表。 在另一個@Component
我已自動連線此處理程序以到達其會話。 但是,它始終為零尺寸(盡管原始尺寸不是)。 我不能自動連接同一單個對象嗎? 為什么? @Component
默認不是單例嗎?
這是代碼:
WebSocketHandler.java
@Component
public class WebSocketHandler extends TextWebSocketHandler {
public CopyOnWriteArrayList<WebSocketSession> sessions = new CopyOnWriteArrayList<WebSocketSession>();
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session);
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
System.out.println("SIZE: "+ sessions.size()); // -> This grows as clients connected
}
public CopyOnWriteArrayList<WebSocketSession> getSessions() {
return sessions;
}
}
MyComponent.java
@Component
public class MyComponent {
@Autowired
WebSocketHandler wshandler;
@Scheduled(fixedRate=20000)
public void mytask() {
System.out.println(wshandler.sessions.size()); // THIS IS ALWAYS ZERO
// wshandler.getSessions().size() -> no difference
}
}
這是一個虛擬錯誤。 在我直接從示例中復制的WebSocketHandler的配置中,我已經在創建處理程序。
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler(), "/mywebsocket").setAllowedOrigins("*");
}
}
因此,修復很容易:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
MyWebSocketHandler wshandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(wshandler, "/mywebsocket").setAllowedOrigins("*");
}
}
多虧Dovmo ,我也將類的名稱更改為MyWebSocketHandler,因為Spring已經有了WebSocketHandler。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.