5 razones para no utilizar Spring

Hace tiempo Luis me envío este artículo y la verdad es que me dejó bastante mal ya que soy un fiel defensor de Spring, pero por otro lado me atrajo ya que es de los pocos que se atrevía a criticar a Spring. Lo tenía en el tintero ya que el inglés utilizado me ha resultado bastante complicado de entender.

El autor da 5 razones para no utilizar Spring:

  1. La primera dice que la configuración de Spring está inflada y que si se tienen 100 acciones que trabajan con 100 servicios hace falta configurar cada uno de ellos.
  2. Es una crítica a los archivos XML de configuración en sí mismos.
  3. Perdida de las ventajas del tipado fuerte, ya que al injectar objetos los fallos sólo pueden dectarse en tiempo de ejecución.
  4. El container de Spring no es ligero.
  5. Spring promete un software poco acoplado, pero en realidad (según la opinión del autor) , no se preocupa mucho por ello y cree que una vez introducido en la aplicación ésta no puede vivir sin él.

Mi opinión al respecto de estas cuestiones es la siguiente:

  1. Es verdad que la configuración de Spring es un poco inflada, pero si se utiliza un archivo XML de configuración siempre vamos a tener este problema. El de Spring, en concreto, no es de los peores. Yo abogo por utilizar en Java Conventions como Ruby on Rails, pero todavía no hay ningún framework que ofrezca inyección de dependencias por Conventions.De paso también contesto al punto 2.
  2. Es verdad que no se puede evaluar si un objeto ha sido bien inyectado, más que en tiempo de ejecución, pero hoy por hoy no hay otra forma de inyectar objetos y Spring proporciona otra serie de ventajas que tambíen tienen que ver con la inyección de dependencias muy interesantes como las plantillas para los frameworks ORM u otras plantillas para otros servicios, yo creo que merece la pena pagar el precio.
  3. Tiene razón que el container de Spring no es ligero, pero Spring está pensado para ser utilizado en aplicaciones en las que te lo puedas permitir, no tiene sentido utilizar Spring en una aplicación de tiempo real o en una aplicación para un móvil.
  4. En cuanto a lo de que no sea desacoplado no estoy de acuerdo, ya si Spring obliga a programar contra Interfaces, si un día se decide no utilizar Spring basta con reimplementar esas interfaces y listo. Por otro, lado Spring no tiene los problemas que tenían los EJB ya que sólo eran ejecutables dentro del Container de EJB, Spring se puede ejecutar dentro de un Container Web o fuera de él en una aplicación Swing normal y corriente. Si se refiere a la implentación de las interfaces claro que queda ligada a Spring, ya que no se puede implementar algo con un framework sin que quede ligado a él, pero me parece una solución mucho mejor a EJB 2.0. El grado de desacoplamiento me parece bueno.

Estas son mis opiniones, pero no tengo tanto bagaje en la informática como para hablar ex cathedra, así que, me gustaría conocer que pensaís vosotros.

4 Comentarios

  • 1. dahernan  |  Julio 30th, 2007 at 12:26 pm

    Vamos a ver también punto por punto:

    1- Hay cuatro formas de configurar Spring
    * XML puro (todos la conocemos)
    * Programáticamente, por el medio de la API
    * Mediante el estándar Java Configuration (no recuerdo el JSR)
    * Con mínimo XML y anotaciones (Spring 2.1)
    Con lo cual se cae por su propio peso

    2- Mas o menos estoy de acuerdo, aunque si que hay herramientas como SpringIDE que si que ayuda, y otros framework de IoC como Guice, aunque este último, hace acoplamiento fuerte.

    3- Esta es completamente falsa, para mi si que es ligero, recordemos que Spring tiene una distribución por partes spring-core, spring-orm, spring-aop… Si, simplemente quieres IoC no necesitas todo lo demas.

    4- Si que es desacoplado pero al contrario que tu dices nadie te obliga a hacer interfaces, simplemente es una buena práctica hacerlos. Si quitas Spring simplemente tendrías que inyectar las dependencias a mano.
    Ahora claro si usas todas las templates y facilidades que ofrece es normal que ya no lo puedas o más bien quieras quitar :)

  • 2. Raúl Vicente  |  Julio 30th, 2007 at 1:39 pm

    Buenas dahernan,

    la verdad es que en todos los ejemplos que he visto se programa contra interfaces, pense que era requisito de Spring.

    En cuanto a lo que comentas de las tools de Spring, yo me he acostumbrado sin utilizar Spring IDE, pero tengo que probar a ver que tal va.

    En mi caso, yo siempre he utilizado Spring en toda su potencia con templates claro. Esta bien saber que se puede utilizar por partes no lo he probado nunca.

    A mí me parece que una vez puestos a utilizar Spring no valerte de sus facilidades a la hora de manejar conexiones,transacciones,etc es un error. Yo la verdad es que me he acostumbrado y ya no lo quiero dejar.

    Muchas Gracias.

  • 3. jmonne  |  Julio 30th, 2007 at 5:41 pm

    1 - Una buena distribución de los xml con la herencia que se permite entre beans, más la ayuda de SpringIDE permite configurar (si se escoge XML) Spring estupendamente. A todo esto lo que comenta perfectamente dahernan, existen otras posiblidades lo cual no deja de ser una ventaja.
    2 - Me remito al punto 1. Da gusto trabajar con SpringIDE.
    3 - Otra vez, siempre ayuda SpringIDE
    4 - +1 con dahernan (en su punto 3). Respecto al tema de performance pues no entro ya que no he realizado proyectos gigantes, dejando de banda que tampoco muestra datos al respecto.
    5 - Lo siento pero es que no lo veo. Dejando de banda el componente MVC, Spring no te obliga a utilizarle en servicio/dao. Si lo quieres utilizar bien, sino, siempre puedes utilizar otra cosa.

    No sé, por el momento veo mas ventajas que inconvenientes para seguir utilizandolo.

    Saludos!

  • 4. Raúl Vicente  |  Julio 31st, 2007 at 10:24 am

    Bien veo que más o menos estaís de acuerdo conmigo.

    Gracias

Comenta el articulo:

Requerido

Requerido,