无法自动assembly。 找不到SimpMessagingTemplate类型的bean

我基本上是按照文档中提供的指南在Spring中配置Websockets。

我正在尝试从服务器向客户端发送消息,如 “ 从任何地方发送消息 ”一节中所述

在示例之后,您可以自动assembly一个名为SimpMessagingTemplate的类

@Controller public class GreetingController { private SimpMessagingTemplate template; @Autowired public GreetingController(SimpMessagingTemplate template) { this.template = template; } @RequestMapping(value="/greetings", method=POST) public void greet(String greeting) { String text = "[" + getTimestamp() + "]:" + greeting; this.template.convertAndSend("/topic/greetings", text); } } 

但是,我当前的项目找不到bean“SimpMessagingTemplate”。 (Intellij:’无法自动assembly。没有发现SimpMessagingTemplate类型的bean’。

我在互联网上查了几个例子,但是我找不到如何让Spring创建一个SimpMessagingTemplate实例。 我怎样才能自动assembly它?

编辑:

我决定发送更多背景信息。 这是我目前的websocket配置:

          

Websocket适用于此控制器

 @Controller public class SessionController { private static final Logger log = LoggerFactory.getLogger(SessionController.class); @MessageMapping("/new_session") @SendTo("/topic/session") public SessionStatus newSession(Session session) throws Exception { Thread.sleep(3000); // simulated delay log.info("Response sent !!"); return new SessionStatus("StatusReport, " + session.toString() + "!"); } } 

我只是不确定如何使这项工作

 public class SessionController { private static final Logger log = LoggerFactory.getLogger(SessionController.class); private SimpMessagingTemplate template; @Autowired public SessionController(SimpMessagingTemplate template) { this.template = template; } } 

由于找不到bean“SimpMessagingTemplate模板”。 Spring文档没有提供有关此事的更多详细信息。

编辑 : github中的工作代码示例

奇怪,因为当你使用websocket命名空间时,“message-broker”元素会导致创建一个SimpMessagingTemplate bean,然后你可以使用它来注入。 控制器和websocket命名空间是否在同一个ApplicationContext中,或者可能是“根”上下文中的一个,另一个是DispatcherServlet上下文中的?

我有同样的问题,因为我的websocket配置文件发生错误:

 @Configuration @EnableWebSocketMessageBroker @EnableScheduling public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { } 

没有被spring扫描。

所以解决方法是将包含此配置文件的包添加到扫描的包中。

您应该在applicationContext xml中具有与类名相同的bean定义ID,或者在注入类时使用@Component注释以使Autowire工作

  

您可能需要在下面的标签中定义指向您的包的标签

  

罗森是对的。 添加元素会将SimpMessagingTemplate bean添加到注入的上下文中。 这必须位于Web应用程序根上下文中,而不是Spring DispatchServlet的上下文中。 例如,在以下web.xml文件中,message-broker元素应包含在app-root.xml文件中。 仅包含在app-mvc.xml中将导致NoSuchBeanDefinitionException。

  contextConfigLocation classpath:/spring/app-root.xml   Spring MVC Dispatcher Servlet org.springframework.web.servlet.DispatcherServlet  contextConfigLocation classpath:/spring/app-mvc.xml  1