采用STOMP时会报Can't Autowired SimpMessagingTemplate 或者Can't Autowired AbstractMessageSendingTemplate

当我们使用spring websocket进行订阅推送时无疑要选择STOMP的方式,当我在项目中使用的时候采用的是将kafka中的消息通过STOMP推送到客户端,但是再用SimpMessagingTemplate 发送消息的时候报错Can't Autowired SimpMessagingTemplate...

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.messaging.simp.SimpMessagingTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1644)	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1203)	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164)	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)	... 62 more

经过探索,导致该问题出现的原因是:将STOMP的配置放在了Spring的DispatcherServlet上下文中。正确的是应该讲该配置放到ContextLoaderListener 上下文中。

也就是说你的配置文件或者采用注解方式来实现websocket stomp的相关配置时一定要将配置放在spring-beans下面或者将你的websocket配置类的扫描路径

<context:component-scan base-package="你的路径"/>

放在spring-beans中 ,切勿放在spring-servlet.xml中。

最后讲讲ContextLoaderListener与DispatcherServlet所创建的上下文ApplicationContext的区别

1.ContextLoaderListener中创建ApplicationContext主要用于整个Web应用程序需要共享的一些组件,比如DAO,数据库的ConnectionFactory等。而由DispatcherServlet创建的ApplicationContext主要用于和该Servlet相关的一些组件,比如Controller、ViewResovler等。
2.对于作用范围而言,在DispatcherServlet中可以引用由ContextLoaderListener所创建的ApplicationContext,而反过来不行。

附上参考链接:

https://blog.csdn.net/hefrankeleyn/article/details/89742745

https://blog.csdn.net/winfredzen/article/details/78202828

第一个链接是告诉你为何出错,第二个链接具体分析ContextLoaderListener与DispatcherServlet的区别和如何配置!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值