Ci sono pochissimi aspetti negativi in primavera
Ho pensato a lungo e duramente per trovare seri svantaggi nell'usare Spring, e temo di aver fallito. Spring è un eccellente toolkit all'interno dei modelli JEE / OSGi. Fornisce una vasta gamma di modelli non invasivi che semplificano notevolmente il lavoro con le API di supporto spesso ingombranti fornite dai contenitori delle applicazioni.
Spring vs the core JEE
Spring non sostituisce le tecnologie JEE core - beh forse EJBs ma con la nuova specifica EJB3 non c'è quasi nulla in esso - invece fornisce modelli per renderne l'uso molto più semplice. Considera JAX-RS l'API dei servizi web RESTful. Spring fornisce il RestTemplate
che viene in genere utilizzato come segue (supponiamo che sia iniettato):
SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);
Questo andrà a someURI
per ottenere XML / JSON / YAML e renderlo unmarshal nell'oggetto dominio specificato. Tutto in un'unica riga di codice.
Le eccezioni e la registrazione degli errori vengono gestite come eccezioni di runtime, rendendo più semplice mantenere pulito il codice locale. Spring funziona anche per ridurre le dipendenze esterne laddove possibile, quindi l'esempio precedente utilizza solo i pacchetti java.net. *).
Esistono modelli per JMS, JAX-WS, JPA, JTA e così via. Tutti lo rendono molto più facile da utilizzare con questi standard e rendono il tuo codice più pulito e meno soggetto a errori.
Architettura Pick'n'mix
Da un punto di vista architettonico, Spring enfatizza un approccio pick'n'mix leggero. Ciò ha l'effetto di consentire agli architetti di sistema di evitare l'uso di contenitori di applicazioni all-in-tutti gonfiati come WebSphere, JBoss o Glassfish e scegliere invece le loro controparti leggere - Jetty, Tomcat e così via.
Perché è così importante? I contenitori applicativi più grandi hanno un ciclo di aggiornamento molto più lungo che si adatta alle esigenze di alcuni clienti più di altri. Le banche non hanno bisogno di essere agili come una startup one man.
Se si desidera utilizzare l'ultima versione dei framework di supporto, è improbabile trovarli nei contenitori delle applicazioni di grandi dimensioni. Invece, dovrai includerli manualmente e Spring lo renderà più semplice.
Inoltre, devi solo includere specificamente le tecnologie di cui hai bisogno. I contenitori delle applicazioni ti daranno JMS, EJB e ogni altro acronimo sotto il sole, ma vuoi solo una facile persistenza con JPA. Include Spring e Hibernate e il gioco è fatto.
Allora perché non Spring?
Evita Spring se vuoi andare con le implementazioni specifiche delle vendor delle librerie. Inoltre, evitalo se si desidera mantenere i dettagli di configurazione all'interno delle classi piuttosto che esternalizzarle in XML o JNDI. E sicuramente evitarlo se pensi che le soluzioni gratuite e open source non siano adatte al tuo ambiente.