关于在websocket中注入spring的service

之前的项目是利用servlet写的,在websocket直接是实例化service,改成ssm时,service无法自动装配到websocket中。利用一下办法解决:

//UserService为你要注入的接口
UserService userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");

全部配置如下:

@ServerEndpoint(value="/echo")
@Component
public class EchoSocket {

  	 //你要注入的service或者dao
  	private UserService userService;
	private static List<Friend> list = new ArrayList<Friend>();
	private static Map<Integer, Session> map = new HashMap<Integer, Session>();
	
	@OnOpen
	public void open(Session session) throws Exception{
		//此处为关键
		userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");
		String queryString = session.getQueryString();
		String urluserid = queryString.split("=")[1];
		int myid = Integer.valueOf(urluserid);
		map.put(myid, session);
		list = userService.makefriendinfo(myid);
		if(list!=null){
			for (Friend friend : list) {
				User user = userService.getUserById(friend.getMyid());
				String str = Friend.getJson(user);
				try {
					map.get(friend.getFriendid()).getBasicRemote().sendText(str);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	@OnMessage
	public void message(Session session,String msg) throws Exception{
		userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");
		JSONObject jsonObject = JSON.parseObject(msg);
		String urluserid = jsonObject.getString("urluserid");
		String flag = jsonObject.getString("flag");
		String zhuid = jsonObject.getString("zhuid");
		String oobo = jsonObject.getString("oobo");
		if(oobo!=null){
			list = userService.makefriendinfo(Integer.valueOf(zhuid));
			if(list!=null){
				for (Friend friend : list) {
					User user = userService.getUserById(friend.getMyid());
					String str = Friend.getJson(user);
					try {
						if(map.get(friend.getFriendid())!=null){
							map.get(friend.getFriendid()).getBasicRemote().sendText(str);
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			
		}
		if(oobo==null){
			if(flag.equals("1")){
				Session s = map.get(Integer.valueOf(zhuid));
				if(s!=null){
					Friend f = new Friend();User user = userService.getUserById(Integer.valueOf(urluserid));
					f.setReciver("添加"+user.getUsername()+"成功");f.setKey(true);
					f.setMyid(Integer.valueOf(zhuid));f.setFriendid(Integer.valueOf(urluserid));
					try {
						s.getBasicRemote().sendText(Friend.toJson(f));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}else if(flag.equals("0")){
				Session s = map.get(Integer.valueOf(zhuid));
				if(s!=null){
					Friend f = new Friend();User user = userService.getUserById(Integer.valueOf(urluserid));
					f.setReciver(user.getUsername()+"拒绝添加你为好友");f.setKey(false);
					f.setMyid(Integer.valueOf(zhuid));f.setFriendid(Integer.valueOf(urluserid));
					try {
						s.getBasicRemote().sendText(Friend.toJson(f));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	
	@OnClose
	public void close(Session session){
		String queryString = session.getQueryString();
		String urluserid = queryString.split("=")[1];
		int myid = Integer.valueOf(urluserid);
		map.remove(myid);
	}
}

猜你喜欢

转载自blog.csdn.net/WuQingLaoXingXing/article/details/85158988
今日推荐