Lentitud en el Spring Framework

¿Alguno de ustedes ha desarrollado una aplicación de escritorio usando spring framework?, ¿desarrollado cualquier aplicación con spring framework? les ha sucedido que es realmente lenta al iniciar? yo por ejemplo tengo una aplicación que si es bastante grande, carga varios beans de servicios y algunos 150 beans de objetos comunes como vistas para el gui, comandos, etc, sin embargo cuando la ejecuto con una laptop acer que tiene un procesador intel core 7 de tercera generación, 8 gigas en ram y un disco duro de estado sólido, tarda entre 40 y 50 segundos en iniciar, algo que considero bastante tiempo. Si ejecuto la misma aplicación en una intel core 5 con 4 gigas en ram y un disco duro que no es sólido, el tiempo se va a varios minutos.

La pregunta es si han tenido algun problema parecido? que tipo de solución utilizaron? por que yo estoy pensando seriamente en aventar el spring framework y hacerlo a la antigüita. Sin embargo esta descición también me cuesta por que estoy aprovechando muchas ventajas que ofrece spring y tendria que invertir mucho tiempo en ver como realizarlas por fuera.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Versión

- Que versión de Java estas usando?
- Para la GUI estas usando Swing o JavaFX?
- Que versión de Spring estas usando?
- Lo tienes integrado con algún otro framework, Hibernate por ejemplo?

Imagen de Nopalin

Estoy usando Java 8, spring

Estoy usando Java 8, spring 3.5 aún por que usó un framework gui llamado Valkyrie que se quedó en esa versión y ya no le dieron continuidad y yo aún no lo he migrado a una versión más nueva de spring, aparte de que ya tengo varios años con él software y en ese momento era el más nuevo. No uso hibernate puro jdbc template, tengo jetty embebido pero al quitarlo no mejora mucho. Es 100% annotated based.

OK

Seria necesario revisar tus archivos de configuración de Spring (XMLs) para saber como levantas el contexto e inyectas los beans, de esta forma podríamos detectar alguna mala practica.

Por otro lado, Java 8 ya ofrece las características mas relevantes que en su momento ofrecía Spring 3.x

Saludos!

Imagen de Nopalin

Como dije, es 100% annotated

Como dije, es 100% annotated based no hay XML's de configuración. Los beans se inyectan con le anotación @Autowired de spring y no hago en ningún momento component scan ya que eso mermaría más la velocidad, todos los beans de cualquier tipo (configuracion, servicios, normalitos, etc) son declarados.

Saludos

Imagen de ezamudio

Micronaut

Tienes de dos: o actualizas a Spring 5, o te pasas a Micronaut.

La lentitud que ves al inicio de la aplicación es porque Spring todo lo resuelve en tiempo de ejecución, utilizando muchísimo reflection.

Micronaut en cambio hace mucho del procesamiento en tiempo de compilación, de modo que cuando corres tu aplicación, no se usa reflection para nada, ya todo fue calculado al compilar y solamente se crean los beans con una configuración que se determinó en tiempo de compilación. Eso hace que el arranque sea mucho pero mucho más rápido.

Pasarte de Spring a Micronaut no es trivial, pero tampoco es super complicado. Incluso puedes seguir usando cosas de Spring y solamente usar Micronaut para la inyección de dependencias, que es lo que realmente te está afectando ahorita.

Imagen de Nopalin

Muy buena opción

No había leído nada sobre micronaut, luego pasa que estás tan metido en los proyectos que das poco espacio para cosas nuevas, solo cuando los necesitas como ahorita.
Spring 5 no cambiará mucho las cosas ya leí al respecto por que sigue resolviendo las dependencias con reflexión usando los proxis de Java, con micronaut como dices si cambia el paradigma.
Muchas gracias voy a darle una leída.