@ServerEndpoint und @Autowired
Wie kann ich autowire ein Feld in eine @ServerEndpoint. Der folgende Code funktioniert nicht.
@Component
@ServerEndpoint("/ws")
public class MyWebSocket {
@Autowired
private ObjectMapper objectMapper;
}
Allerdings, wenn ich entfernen Sie die @ServerEndpoint
es funktioniert gut.
Bin ich mit spring 3.2.1 und Java 7
- Sind Sie immer Fehler?
- objectMapper null ist. Es ist nicht gespritzt/autowired
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass Sie versuchen, zu integrieren, Spring und Java WebSocket-API. Eine Klasse kommentiert von
@Component
registriert ist, eine spring-bean und die Instanz ist geschafft Frühjahr als singleton standardmäßig. Jedoch, eine Klasse kommentiert von@ServerEndpoint
registriert, um eine server-side-WebSocket endpoint und jedes mal, wenn die entsprechenden Endpunkts WebSocket mit dem server verbunden ist, dessen Instanz wird erstellt und verwaltet von JWA Umsetzung. Daher können Sie nicht verwenden, sowohl Annotationen zusammen.Vielleicht die einfachste Lösung ist die Verwendung CDI statt des Frühlings. Natürlich, der server-support-CDI.
Wenn es nicht sinnvoll ist, können Sie Sie abzufangen Vorgang Instanziierung der Klasse kommentiert mit
ServerEndpoint
durch die Verwendung einer eigenen version von ServerEndpointConfig.Konfigurator. Anschließend können Sie die Klasse instanziieren, indem Sie sich selbst und autowire es mit einer Instanz vonBeanFactory
oderApplicationContext
. Tatsächlich, es gibt bereits ähnliche Antwort auf diese Nutzung ein. Sehen diese Frage und Martins " Beispiel (Insbesondere angepasste Konfigurator für die integration mit Spring).Könnte dieses Problem behoben werden, mit SpringConfigurator (Feder 4):
Add-Konfigurator, um Ihre ServerEndpoint:
erforderlich maven-dependency:
Sollten Sie in der Lage, nur fügen Sie diese an Ihre Klasse eigentlich.:
Meine Lösung war:
wo SpringApplicationListener ist ein ApplicationContextAware, welche den Kontext, in eine statische variable
Java ee 7 Spezifikation sagt