Через что реализовать очень простую сетевую игру?
У Вас крайне простая игра крестики-нолики. Получается для сетевой игры нужно передавать следующее:
- Событие новой игры ; //Идентификатор пакета 1
- Событие установки крестика\нолика(int "x" , "y", и к примеру булевой тип isCircle)//Идентификатор пакета 2
- Событие победы. //Идентификатор пакета 3
- Событие ошибки(неверный ход) //Идентификатор пакета 4
Т.е. всего 4 типа данных.
Сетевой пакет можно представить следующим текстовым видом:"число_идентификатор_типа_пакета;опциональные данные;опциональные данные"
; - делитель(delimiter строки)
Серверная сторона порт=7777:ServerSocket ss = new ServerSocket(7777); //создали сервер
Socket socket = ss.accept();//Ждем клиента
//Сюда попадаем только когда подключился клиента
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
     line = in.readUTF(); // Тут ждем и получаем строку от клиента
     String[] data = line.split(";"); //Разделяем полученную строку в массив строк
     if(data[0].equals("1")){
     //Сбрасываем уровень начинаем новую игру}
     if(data[0].equals("2")){
     //Ставим крестик\нолик по координатам
     int x =data[1]; int y=data[2];boolean isCircle=data[3] //Не забудь типы привести, ну там Integer.parse(data[номер])
     //Ну возможно отправить ответ клиенту
    out.writeUTF(line); // шлем его же строку обратно чтобы клиент у себя отрисовал фигуру или пакет с ошибкой
    out.flush(); // заканчиваем передачу в поток.
     }
     ....
}
У клиента:Socket socket = new Socket(InetAddress.getByName("IP сервера"), 7777);  //создаем сокет
DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
String line = null;
while(true) {
... тут все аналогично серверу только с правками для клиента
}
Если хочется абстракции то заверни псевдокод выше в свой класс. 
Spring вообще не для этих целей служит, в данной задаче это всеравно что забивать гвозди микроскопом.
Для вашей задачи сокеты это какраз то что и нужно изза того что все крайне просто и на глазах Проблем с сокетами тоже никаких быть не может.
"не охота копаться в устройстве велосипеда, возьму танк" :)
java.net.Socket это уже и есть абстракция. Этот API избавляет вас от необходимости разбираться в устройстве сетевых коммуникаций.
так что я за ответ  Дмитрий Александров 'а