2015-11-10 99 views
4

我試圖在服務類中使用SimpMessagingTemplate時遇到了麻煩。以下是相關的代碼片段:自動裝配SimpMessaging模板

UserService.java - 自動裝配失敗,模板= NULL

@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 - 自動裝配工作,春天的WebSockets工作作爲inteded。

@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(); 

    } 
} 

所以基本上自動裝配工作在我的控制器類,但不是在我的服務。我確實需要在Service中手動調用convertAndSendToUser。在控制器和服務之間自動裝配SimpMessagingTemplate有什麼區別?任何關於爲什麼會發生這種情況的輸入是非常感謝

+0

你可以發佈基於Spring註解的配置嗎? – Raf

+0

你有沒有找到這個解決方案? – user1102532

回答

0

最初,控制器自動裝配和服務自動裝配(如果SimpMessagingTemplate在控制器中可用,它也必須在服務類中可用)之間沒有任何區別,除非spring沒有加載服務類。

如何加載你的豆?也許服務類的包不包含在自動掃描中?你是在一個上下文XML中定義你的bean嗎?

+0

沒有特定的配置,因爲Spring在這種情況下自己處理自動裝配而不需要特定的配置。正如我所說的,它在Controller中工作得很好,但不在我的服務中。 @ComponentScan(basePackages =「com.xy. *」)被設置爲掃描整個項目 – Lukehey