ServerEndpoint tomcat8和spring4环境中无法注入bean的问题

在tomcat8和spring4下搭建了websocket的聊天室,但是却存在一个问题,websocket服务端无法注入业务处理的所需要的service bean,初步怀疑是加载顺序的问题。

一:不能处理之前的关键代码如下

import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value = "/chat/video")

public class ChatWebSocketHandler{

//省略其他与本文无关!!!!

@Autowired

private IChatLecture iChatLecture;

@OnMessage

public void onMessage(String message, Session session) {

//业务处理:注 此处的bean注入每次都是空指针,要命,百度搜索无果!!

iChatLecture.pushContent.....do something

}

//其他省略!!!!

}

二:彻底解决开篇中问题

import javax.websocket.server.ServerEndpoint;

import org.springframework.web.socket.server.standard.SpringConfigurator;

@ServerEndpoint(value = "/chat/video",configurator = SpringConfigurator.class)

public class ChatWebSocketHandler{

//省略其他与本文无关!!!

private final IChatLecture iChatLecture;

@Autowired

public ChatWebSocketHandler(IChatLecture iChatLecture) {

this.iChatLecture = iChatLecture;

}

@OnMessage

public void onMessage(String message, Session session) {

//业务处理:此时service bean完美注入,苦逼的问题完美解决

iChatLecture.pushContent.....do something

}

}

时间: 2024-07-30 20:17:21

ServerEndpoint tomcat8和spring4环境中无法注入bean的问题的相关文章

生产环境中系统调试--BTrace

BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆栈信息等,并且做到最少的侵入,占用最少的系统资源. 由于Btrace会把脚本逻辑直接侵入到运行的代码中,所以在使用上做很多限制:1.不能创建对象2.不能使用数组3.不能抛出或捕获异常4.不能使用循环5.不能使用synchronized关键字6.属性和方法必须使用static修饰 根据官方声明,不恰当的使用BTrace可能导

在多线程环境中使用CoreData

在多线程环境中使用CoreData BY 子非鱼 · 2014 年 10 月 13 日 上回书说道,其实CoreData学起来也没有很复杂,我们其实增删改查都和别的ORM大同小异.但是世界总是很复杂的,一根筋的去考虑问题很容易卡到蛋,默认情况下我们的代码都在Main Thread中执行,数据库操作一旦量多了,频繁了,势必会阻塞住主线程的其他操作,俗话说,卡住了. 这个世界天然是多线程的,所以我们操作数据也必须多线程.CoreData对多线程的支持比较奇怪(按照一般的思路来说),CoreData的

在多个环境中工作

在多个环境中工作 原文: Working with Multiple Environments作者: Steve Smith翻译: 刘浩杨校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管理应用程序行为的改进,如开发(development),预演(staging)和生产(production).环境变量用来指示应用程序正在运行的环境,允许应用程序适当地配置. 章节: 开发,预演,生产 在运行时确定环境 启动约定 概要 附加资源 查看或下载示例代码 开发,预演,生产 AS

非Spring环境注入bean

在有些不属于spring容器里的环境,想使用getBean的方式注入的话,在spring的Application.xml里面配置这条bean. 这种方式相当于将bean注入spring环境中去. 调用方式为下图: 这样就完成了非Spring环境的bean注入

【翻译自mos文章】ABMR:在asm 环境中测试Automatic Block Recover 特性的方法

ABMR:在asm 环境中测试Automatic Block Recover 特性的方法 参考原文: ABMR: How to test Automatic Block Recover Feature with ASM setup (Doc ID 1510090.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.3 and later Information in this document applies to any

在完全由Spring管理的环境中使用Spring的Context获取Bean实例

在大型的应用中,常常会有很灵活的需求,而在使用了框架之后,虽然可以大大提高开发的效率,但同时,也把我们框到一个架子中了. 下面先说一下我遇到的问题,事情大概是这样的: @Component @Scope("prototype") public class Action1 implements Action{ ..... } @Component @Scope("prototype") public class Action2 implements Action{ .

spring4.0.6最新稳定版新特性学习,注解自动扫描bean,自动注入bean(二)

Spring4.0的新特性我们在上一章已经介绍过了.包括它对jdk8的支持,Groovy Bean Definition DSL的支持,核心容器功能的改进,Web开发改进,测试框架改进等等.这张我们主要介绍spring4.0的自动扫描功能,以及对bean的过滤等特性进行学习. 好吧,废话少说,我们来看看代码吧. package com.herman.ss.test; import org.springframework.context.ApplicationContext; import org

Apollo 5 教你怎么把自己的配置放到 Spring 环境中

目录: 前言 处理方案 简单例子 前言 有的时候,你可能需要在 Spring 环境中放入一些配置,但这些配置无法写死在配置文件中,只能运行时放入.那么,这个时候该怎么办呢? Apollo 就是搞配置的,那么自然会遇到这个问题,他是如何处理的呢? 处理方案 首先要知道 Spring 环境中,一个配置的数据结构是什么? 是抽象类 PropertySource<T>, 内部是个 key value 结构.这个 T 可以是任意类型,取决于子类的设计. 子类可以通过重写 getProperty 抽象方法

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/ "微服务"的概念在 2014 年正式提出之后,越来越多的团队开始用它来设计自己的业务系统,各种微服务框架和开发过程管理方法也同时兴起.不断成熟.微服务设计方法清晰地定义了各个开发团队的业务边界,微服务框架以不同的方式实现了服务之间的协作与集成,根据康威定律我们可以推导这