Não dá para misturar injeções assim, cada framework é responsável por controlar suas dependências.
Usando o @ManagedProperty do JSF, você só pode injetar outros beans reconhecidos pelo JSF (classes com a anotação @ManagedBean). Como o JSF não encontrou nenhum bean com o nome userService, ele inicializou como nulo.
Por curiosidade: isso é um exercício ou estudo? Porque, já que está usando Spring, eu acho que seria melhor injetar com as próprias anotações dele, não?
Não tenho essa edição da revista, olhei no site, mas obviamente lá não tem o artigo completo. Tentei baixar os fontes, mas, como a edição é mais antiga, não está disponível mais.
No artigo não fala nada sobre configurar os dois em conjunto? Porque, eu posso afirmar que na ausência de outra configuração além da padrão, o JSF não vai procurar nada além das classes anotadas com seu @ManagedBean para injetar propriedades.