Spring versus JavaEE é uma daquelas discussões que são eternas. Não quero me prolongar nas qualidades de uma ou de outra tecnologia, mas apenas em um fenômeno muito forte que vem ocorrendo e que deveria deixar a maior parte das organizações atentas. Este fenômeno chama-se PaaS (Plataform as a Service).
O PaaS surge como forma de tornar praticamente transparente a gestão da infra-estrutura de um sistema computacional, trazendo a escalabilidade de forma flexível e com pouco ou nenhum overhead. No entanto, as soluções mais recentes apontam para o uso de plataformas mais leves como Python, Ruby on Rails, JavaScript, .NET e Java / Servlets, deixando completamente de lado a plataforma JavaEE. E há uma razão para isso: ninguém precisa de JavaEE de verdade. JavaEE nada mais é que uma solução em busca de um problema a ser resolvido.
Neste sentido, ferramentas úteis aos desenvolvedores fornecidas na plataforma JavaEE podem ser obtidas, usando apenas programação declarativa, através do Spring Framework, que pode ser executado em qualquer plataforma que suporte Java puro.
Ou seja, desenvolva com Spring (ou Guice, ou não use nada para injeção de dependências) e possibilite a realização de deploy na nuvem (BeansTalks e GAE, por exemplo). Em um mundo onde a infra-estrutura se torna transparente, JavaEE não parece ter muito futuro.