所以我有一个Runnable类,一旦满足某个条件就应该调用notifyUser方法(String username,String content)。我一直试图让它工作但它总是失败NullPointerExceptions。这很可能与自动装配失败有关(因为Runnable类不是由Spring管理的)。在Spring管理的上下文中自动装配SimpMessagingTemplate工作得很好,方法可以做到他们应该做的事情。
我想要做的是调用SimpMessagingTemplate的方法(或类似的方法)convertAndSendToUser,但我无法在此上下文中自动装配它。到目前为止,我尝试过的所有内容都失败了,这就是为什么我认为我的一些基本概念出错了。
我的配置如下所示:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/test");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/test").withSockJS();
}
}
更新:我通过使用以下代码设法摆脱了NullPointerException ..但是客户端没有获取消息(convertAndSendToUser()以及convertAndSend())。开发人员控制台不显示任何传入消息。
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(Application.class);
ctx.getAutowireCapableBeanFactory().autowireBean(myService);
答案 0 :(得分:1)
这是真的,因为你这样做:
new AnnotationConfigApplicationContext(Application.class);
在你的班级中,意味着开始新的appicationContext
。但是您的user
已在另一个上下文中注册。
目前尚不清楚为什么你不能让你的组件由Spring管理,但如果你无法访问SimpMessagingTemplate
,则没有其他方法可以使用applicationContext
。
最好与我们分享您的代码以进行调查,并决定我们如何在那里提供帮助。
也许你可以在那里使用WebApplicationContextUtils
...