it-swarm.it

Perché non il quadro di primavera?

Ci sono degli svantaggi nel legare la mia applicazione al framework Spring?

Non sto parlando di bug o problemi del genere, se presenti. Sto parlando di aspetti strategici e architettonici che influenzeranno il mio ciclo di vita delle applicazioni.

Dovrei preferire Spring over Java Funzionalità di base EE supportate dal contenitore EE? Quali sono i vantaggi?

43

Dato che altri post qui menzionano il lato positivo, menzionerò gli aspetti negativi della primavera. Anche con questi aspetti negativi, Spring è onnipresente nella sua nicchia, affidabile e funziona come pubblicizzato.

Quindi, sui negativi:

  • Enorme: non vorrei mettere vasi con 3000 classi nel mio piccolo progetto di hobby.

  • Ci sono alcune descrizioni più lente rispetto ad altri framework DI come Guice o Pico. aneddotico e probabilmente non troppo importante.

  • Trattare con alcune parti della primavera può essere frustrante quando non sono parti ben documentate del nucleo e la documentazione che trovi diverge tra le diverse versioni principali.

Come effetto collaterale delle sue dimensioni, preparati a trascorrere ore gioiose a scavare tra pile di classi che, mentre sono logicamente nominate, iniziano a fondersi in un gigantesco mucchio di sostantivi quando sei stanco ("certo, devi solo collegare TransactionAwareConnectionFactoryProxy al tuo UserCredentialsConnectionFactoryAdapter per il tuo .. zzzzzzzz "). Ad essere onesti, hanno davvero un nome logico, è una risposta ragionevole alle dimensioni del framework, ma comunque.

Forse a causa di questo adattamento di nuovi pezzi, la primavera può essere lenta, almeno per me. Non tanto con la molla core, ma ci sono connettori per quasi tutto, e non sono tutti ben documentati come potrebbero essere, ed è allora che inizi a guadare attraverso la minestra dei nomi. Ancora una volta, è davvero tutto solo in risposta alle sue dimensioni.

42
Steve B.

Ci sono pochissimi aspetti negativi in ​​primavera

Ci ho pensato a lungo per trovare dei lati negativi nell'uso di Spring e temo di aver fallito. La primavera è 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 di applicazioni.

Spring vs the JEE core

La primavera non sostituisce le tecnologie JEE di base - beh forse gli EJB ma con la nuova specifica EJB3 non c'è quasi nulla in esso - invece fornisce modelli per renderli molto più facili. Considerare JAX-RS l'API dei servizi Web RESTful. Spring fornisce RestTemplate che viene generalmente utilizzato come segue (supponiamo che sia iniettato):

SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);

Questo andrà a someURI ottenere XML/JSON/YAML e rimuoverlo nell'oggetto dominio specificato. Tutto in un'unica riga di codice.

Le eccezioni e la registrazione degli errori vengono gestite come eccezioni di runtime che semplificano la pulizia del codice locale. Spring funziona anche per ridurre le dipendenze esterne ove possibile, quindi l'esempio sopra usa solo i pacchetti Java.net. *).

Esistono modelli per JMS, JAX-WS, JPA, JTA e così via. Tutti loro rendono molto più semplice lavorare con questi standard e rendere il codice più pulito e meno soggetto a errori.

Pick'n'mix architecture

Dal punto di vista architettonico, Spring sottolinea un approccio pick'n'mix leggero. Ciò ha l'effetto di consentire agli architetti di sistema di evitare l'uso di contenitori di applicazioni gonfiati per tutti come WebSphere, JBoss o Glassfish e di scegliere invece le loro controparti leggere: Jetty, Tomcat e così via.

Perché questo è importante? I contenitori di applicazioni più grandi hanno un ciclo di aggiornamento molto più lungo che soddisfa le esigenze di alcuni client più di altri. Le banche non hanno bisogno di essere agili come una startup da un solo uomo.

Se si desidera utilizzare l'ultima versione dei framework di supporto, è improbabile che li trovi nei grandi contenitori dell'applicazione. Invece, dovrai includerli manualmente e Spring renderà tutto più semplice.

Inoltre, devi solo includere specificamente le tecnologie di cui hai bisogno. I contenitori dell'applicazione ti daranno JMS, EJB e ogni altro acronimo sotto il sole, ma vuoi solo una facile persistenza con JPA. Includi Spring e Hibernate e il gioco è fatto.

Quindi perché non primavera?

Evita Spring se vuoi andare con le implementazioni di librerie specifiche del fornitore. Inoltre, evitalo se desideri mantenere i dettagli di configurazione all'interno delle tue classi anziché esternalizzarli in XML o JNDI. E sicuramente evitatelo se pensate che le soluzioni gratuite e open source non siano adatte al vostro ambiente.

9
Gary Rowe

una cosa interessante che menziona Martin Thompson in questo articolo è che la primavera può avere un impatto non banale sui tempi GC:

Mantenere le pile di chiamate ragionevolmente piccole. Ancora più lavoro da fare qui. Se sei abbastanza pazzo da usare Spring, dai un'occhiata alle tue pile di chiamate per vedere cosa intendo! Il garbage collector deve accompagnarli a trovare oggetti raggiungibili. -Martin Thompson

Questo genere di cose non sarà un grosso problema per la maggior parte delle app, ma è una vera preoccupazione per il tipo di app a cui si riferisce Martin.

5
Paul Sanwald

La primavera è davvero buona. Spring Core va bene. Vorrei aggiungere agli altri punti, se sei nella categoria di nicchia in cui le prestazioni sono veramente una preoccupazione, ti consigliamo di evitare gli altri moduli Spring, solo se sei nelle mani dei migliori sviluppatori. Questo è solo un problema se si esegue un sistema in cui le prestazioni sono davvero fondamentali. Nelle mani di sviluppatori medio-bravi, Spring probabilmente ti darà una spinta alle prestazioni contribuendo a scrivere un codice semplice e pulito.

3
jasonk

Spring si impegna a non essere invasivo in termini di accoppiamento non vincolante dal codice dell'applicazione.

Si sta anche muovendo di più in quella direzione su Tiem. Nelle versioni precedenti avresti bisogno di estendere le classi di base, quindi è passato alle annotazioni e al giorno d'oggi è sempre più un uso dei POJO configurati in XML.

Questo è un enorme vantaggio strategico rispetto ad altri framework applicativi.

1

La primavera è diventata praticamente parte della piattaforma ora. Ovunque in JEE5 e 6 trovi sempre più iniezione di risorse, quindi almeno quella parte di Spring, se rimani fedele, è/sarà solo un'altra parte della piattaforma, (vedi @Inject). Altre parti ... non sono così sicuro, specialmente quando si tratta di programmazione orientata all'aspetto. Ci sono altri fornitori di quei servizi, Guice, originariamente di Google, e Weld, di JBoss, credo che siano basati su Guice, forniranno la stessa funzionalità se si attacca a JSR-330 Java specifiche di iniezione.

YMMV

1
mezmo