java-WebSocket中无法注入service

Code码码 2015-12-18 06:06:23
@Configuration
@EnableWebMvc
@EnableWebSocket
@ServerEndpoint(value = "/webSocket")
public class WebSocketServer {
/*@Autowired
private WebSocketConfig aaa;*/

/**
* 当连接建立成功的时候触发
*
* @param session
*/
@Resource
private IPhoneService phoneService;
/* private IPhoneService phoneService;

public void setIPhoneService(IPhoneService phoneService){
this.phoneService=phoneService;
}*/

@OnOpen
public void onOpen(Session session) {
logger_.info("Web-socket session " + session.getId() + " connected.");

try {
for (Session sess : session.getOpenSessions()) {
sess.getBasicRemote().sendText("Session " + session.getId() + " 加入连接 ");
}
} catch (Exception e) {
}
}

/**
* 当接收到消息的时候触发
*
* @param message
* @param session
*/
@SuppressWarnings("static-access")
@OnMessage
public void onMessage(String message, Session session) {
logger_.info("Received message: '" + message + "'. from session: "
+ session.getId() + ". Thread ID: "
+ Thread.currentThread().getId());
try {
// 延迟发送消息
Thread.currentThread().sleep(StaticValues.REFRESH_TIME);

// 向前台发送消息
for (Session sess : session.getOpenSessions()) {
if (session == null) {
return;
}
/* ApplicationContext ac = new ClassPathXmlApplicationContext("spring/mvc.xml");//新加1
AutowireCapableBeanFactory factory = ac.getAutowireCapableBeanFactory();
EmbedDaoImpl bean = factory.createBean(EmbedDaoImpl.class);*/
System.out.println(phoneService);
sess.getBasicRemote().sendText(session.getId() + ": " + message);
}

} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 当关闭的时候触发
*
* @param session
* @param closeReason
*/
@OnClose
public void onClose(Session session, CloseReason closeReason) {
logger_.info("Web-socket session " + session.getId()+ " closed, reason: " + closeReason.toString());
}

/**
*
*/
private Logger logger_;


/**
* 日志
*/
public WebSocketServer() {
logger_ = Logger.getLogger(this.getClass().getName());
}

}

@autowiredy也不行 ,求助啊,这个类的包已经扫描了,而且包下面其他的类中都能注入,只有这个类里面是null
...全文
4654 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Code码码 2018-08-06
  • 打赏
  • 举报
回复
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 在类的初始化方法或者最开始的方法中加上这一段之后,就可以用@Autowired 来自动注入了。
tomMMMMMMMMMMM 2018-03-22
  • 打赏
  • 举报
回复
ContextLoader.getCurrentWebApplicationContext().getBean(BeanName.class)
  • 打赏
  • 举报
回复
这里有个文章可以解决这个问题。 http://blog.csdn.net/u010919083/article/details/79388720
chenmu5241 2017-12-28
  • 打赏
  • 举报
回复
引用 4 楼 qq_28797471 的回复:
拿到了,终于拿到了,用的是 ContextLoader.getCurrentWebApplicationContext().getBean(BeanName)
用你这个办法果断拿到了,爽的一批
风万里 2017-11-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_28797471 的回复:
拿到了,终于拿到了,用的是 ContextLoader.getCurrentWebApplicationContext().getBean(BeanName)
多谢
iuie_sl 2017-06-01
  • 打赏
  • 举报
回复
今天也遇到了这个问题,找了半天也没找到自动注入的方法。最后选择的最原始的方法解决。下面是我的代码 @Component @Lazy(false) public class ApplicationContextRegister implements ApplicationContextAware { private static ApplicationContext APPLICATION_CONTEXT; /** * 设置spring上下文 * * @param applicationContext spring上下文 * @throws BeansException */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { APPLICATION_CONTEXT = applicationContext; } public static ApplicationContext getApplicationContext() { return APPLICATION_CONTEXT; } } webScoket的注入service { ApplicationContext act = ApplicationContextRegister.getApplicationContext(); userService=act.getBean(UserService.class); chatService=act.getBean(ChatService.class); }
坑货 2017-06-01
  • 打赏
  • 举报
回复
找到办法解决 @ServerEndpoint(value = "/facear/slam/ws.do", configurator = SpringConfigurator.class) public class FacearSlamWebSocket { private IFacearSlamService facearSlamService; @Autowired public FacearSlamWebSocket(IFacearSlamService facearSlamService) { this.facearSlamService = facearSlamService; } ......... } 这样就能解决,但是有个问题,断开连接的时候会报错 01-Jun-2017 21:00:36.948 SEVERE [http-nio-8080-exec-10] org.apache.tomcat.websocket.pojo.PojoEndpointBase.onClose Failed to call onClose method of POJO end point for POJO of type [com.facear.slam.FacearSlamWebSocket] java.lang.reflect.InvocationTargetException
公子七 2017-04-19
  • 打赏
  • 举报
回复
有人吗 ???
李思苇 2017-01-22
  • 打赏
  • 举报
回复
引用 6 楼 malixi52073 的回复:
当时 做开发的时候 在2015年7月份的时候 碰到跟楼主一样的问题 网上找遍 都找不到自动注入的方法,最后没办法,在websocket的握手驱动类里面 返回一个能拿到注入权限的类,然后利用这个类 实现websocket接口 拿到自动注入权限。绕了他娘的好大一圈。
这个是怎么实现的呢,求代码
qq332170158 2016-12-01
  • 打赏
  • 举报
回复
引用 4 楼 qq_28797471 的回复:
拿到了,终于拿到了,用的是 ContextLoader.getCurrentWebApplicationContext().getBean(BeanName)
我用的是springboot框架整合websocket,为什么 ContextLoader.getCurrentWebApplicationContext()获取不到值??
malixi52073 2016-03-02
  • 打赏
  • 举报
回复
当时 做开发的时候 在2015年7月份的时候 碰到跟楼主一样的问题 网上找遍 都找不到自动注入的方法,最后没办法,在websocket的握手驱动类里面 返回一个能拿到注入权限的类,然后利用这个类 实现websocket接口 拿到自动注入权限。绕了他娘的好大一圈。
Code码码 2015-12-21
  • 打赏
  • 举报
回复
引用 3 楼 qingyuan18 的回复:
这类扫描不到annotation注入的问题一般都是因为配置路径url @ServerEndpoint(value = "/webSocket")--检查你的tomcat或者其他支持websocket的应用服务器端web.xml里面的配置路径跟你注入的路径是否一致,页面调websocket的时候访问url要跟这个路径一致
websocket是能用的,只是往类里面注入service的时候出错,问题解决了,谢谢
Code码码 2015-12-21
  • 打赏
  • 举报
回复
拿到了,终于拿到了,用的是 ContextLoader.getCurrentWebApplicationContext().getBean(BeanName)
qingyuan18 2015-12-21
  • 打赏
  • 举报
回复
这类扫描不到annotation注入的问题一般都是因为配置路径url @ServerEndpoint(value = "/webSocket")--检查你的tomcat或者其他支持websocket的应用服务器端web.xml里面的配置路径跟你注入的路径是否一致,页面调websocket的时候访问url要跟这个路径一致
Code码码 2015-12-21
  • 打赏
  • 举报
回复
求助啊,卡在这个问题上了
Code码码 2015-12-20
  • 打赏
  • 举报
回复
求助啊,卡在这个问题上了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧