2015-11-10 2 views
4

У меня возникли проблемы с использованием SimpMessagingTemplate в классе Service. Вот соответствующие фрагменты кода:Autowiring SimpMessagingTemplate

UserService.java - автоматическое связывание не удается, шаблон = нуль

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

    } 
} 

Так в основном работает в автоматическом связывании моего класса контроллера, но не в моей службе. Мне нужно вызвать convertAndSendToUser вручную в службе. В чем разница между Autwiring SimpMessagingTemplate между контроллером и службой? Любой вклад в то, почему это может произойти, очень ценится.

+0

Можете ли вы разместить свои конфигурации на основе Spring Annotation? – Raf

+0

Вы когда-нибудь находили решение для этого? – user1102532

ответ

0

Первоначально не существует различий между автоматическим и автоматическим обслуживанием контроллера (и если SimpMessagingTemplate доступен в контроллере, он должен быть доступен и в классе обслуживания), если весна не загружает класс обслуживания.

Как вы загружаете бобы? Может быть, пакет класса обслуживания не покрывается автосканированием? Вы определяете свои компоненты в контексте XML?

+0

Для этого нет конкретной конфигурации, потому что Spring заботится о самом автоуниверситете, не требуя при этом конкретной конфигурации. Как я уже сказал, он отлично работает в контроллере, но не работает. @ComponentScan (basePackages = "com.xy. *") настроен на сканирование всего проекта – Lukehey