Existem muito poucas desvantagens no Spring
Pensei longamente e com afinco para encontrar alguma desvantagem séria em usar o Spring, e estou com medo de ter falhado. Spring é um excelente kit de ferramentas dentro dos modelos JEE / OSGi. Ele fornece uma ampla variedade de modelos não invasivos que simplificam muito o trabalho com as APIs de suporte, que geralmente são complicadas, fornecidas por contêineres de aplicativos.
Primavera versus o núcleo JEE
O Spring não substitui as tecnologias principais do JEE - bem, talvez EJBs, mas com a nova especificação EJB3, praticamente não há nada nele - em vez disso, ele fornece modelos para tornar o uso muito mais fácil. Considere o JAX-RS a API de serviços da Web RESTful. O Spring fornece o RestTemplate
, que é normalmente usado da seguinte maneira (suponha que seja injetado):
SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);
Isso vai para someURI
obter o XML / JSON / YAML e desempenhá-lo no objeto de domínio que você especificar. Tudo em uma única linha de código.
As exceções e o registro de erros são tratados como exceções de tempo de execução, tornando mais fácil manter o código local limpo. O Spring até trabalha para reduzir dependências externas sempre que possível, então o exemplo acima usa apenas os pacotes java.net. *).
Existem modelos para JMS, JAX-WS, JPA, JTA e assim por diante. Todos eles tornam muito mais fácil trabalhar com esses padrões e tornar seu código mais limpo e menos propenso a erros.
Arquitetura Pick'n'mix
Do ponto de vista arquitetônico, o Spring enfatiza uma abordagem leve de pick'n'mix. Isso tem o efeito de permitir que os arquitetos de sistemas evitem o uso de contêineres de aplicativos inchados para todos, como o WebSphere, JBoss ou Glassfish, e escolha suas contrapartes leves em vez disso - Jetty, Tomcat e assim por diante.
Por que isso é importante? Os contêineres de aplicativos maiores têm um ciclo de atualização muito mais longo que atende às necessidades de alguns clientes mais do que outros. Os bancos não precisam ser tão ágeis quanto uma startup de um homem.
Se você quiser usar a versão mais recente de estruturas de suporte, é improvável que você as encontre nos grandes contêineres de aplicativos. Em vez disso, você precisará incluí-los manualmente e o Spring facilita isso.
Além disso, você só precisa incluir especificamente as tecnologias de que precisa. Os contêineres do aplicativo fornecerão JMS, EJB e todos os outros acrônimos sob o sol, mas você só deseja uma persistência fácil com o JPA. Inclua Spring e Hibernate e pronto.
Então, por que não a primavera?
Evite o Spring se você quiser usar as implementações específicas de bibliotecas do fornecedor. Além disso, evite-o se quiser manter seus detalhes de configuração dentro de suas classes, em vez de externá-los em XML ou JNDI. E definitivamente evite se você acha que soluções livres e de código aberto não são adequadas para o seu ambiente.