无法自动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
- 使对象弹簧管理
- 自动assemblySpring超类
- Hibernate实体autowire
- Spring:获取某些接口和类型的所有Bean
- 自动assembly由EasyMock工厂方法生成的bean?
- 如何使用Spring手动自动assemblybean?
- NoSuchBeanDefinitionException:没有为依赖项找到类型的限定bean:预期至少有1个bean有资格作为autowire
- 无法自动assembly字段:private org.springframework.security.core.userdetails.UserDetailsService
- 弹簧和multithreading