Java 自动连线SimpMessageTemplate
我在服务类中使用SimpMessageTemplate时遇到了麻烦。以下是相关的代码片段: UserService.java-自动连线失败,模板=nullJava 自动连线SimpMessageTemplate,java,spring,spring-mvc,websocket,Java,Spring,Spring Mvc,Websocket,我在服务类中使用SimpMessageTemplate时遇到了麻烦。以下是相关的代码片段: UserService.java-自动连线失败,模板=null @Service public class UserService{ @Autowired private SimpMessagingTemplate template; // Some Code public void tellUser(String username, String url) {
@Service
public class UserService{
@Autowired
private SimpMessagingTemplate template;
// Some Code
public void tellUser(String username, String url) {
// This is always true
System.out.println("TEMPLATE NULL? " +(this.template == null));
// Further code omitted
}
}
SocketController.java-自动布线工作,Spring WebSocket按内置方式工作
@Controller
public class WebSocketController {
@Autowired
private SimpMessagingTemplate template;
public void tellUser(String username, String url) {
// False here, template is autowired correctly
System.out.println("TEMPLATE NULL? " +(this.template == null));
this.template.convertAndSendToUser(username, "/test/notify", new Greeting("USER SPECIFIC MESSAGE: " + url));
}
}
WebSocketConfig.java
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/user", "/test");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/test").withSockJS();
}
}
因此,基本上自动布线在我的控制器类中工作,但在我的服务中不工作。我确实需要在服务中手动调用convertAndSendToUser。控制器和服务之间的自动连线SimpMessageTemplate有什么区别?非常感谢您提供有关这可能发生的原因的任何信息。最初,控制器自动连线和服务自动连线之间没有任何区别(如果SimpMessageTemplate在控制器中可用,它也必须在服务类中可用),除非spring未加载服务类
你是怎么装豆子的?也许自动扫描不包括服务类的包?您是在上下文XML中定义bean的吗?您可以发布基于Spring注释的配置吗?您是否找到了解决方案?没有针对它的特定配置,因为在这种情况下,Spring负责自动布线本身,而不需要特定的配置。正如我所说的,它在控制器中工作正常,但在我的服务中不起作用@ComponentScan(basePackages=“com.xy.*)设置为扫描整个项目