¿Es posible sustituir la forma predeterminada de Spring Framework de crear y administrar objetos a través de reflejos con otra herramienta de inyección de dependencia (que sería más rápida, porque evitaría los reflejos), mientras se mantiene la rica API de Spring?
Por ejemplo, me gustaría tener beans creados por Dagger 2 o Tiger o Feather que todavía podrían interactuar con Spring Data/Social/MVC.
https://github.com/google/daga
https://github.com/google/tigre
https://github.com/zsoltherpai/pluma
Sé que alguien va a decir "empieza a preocuparte por el rendimiento cuando se convierta en un problema". Bueno, yo diría que ya es hora de que empieces a preocuparte por eso.
En mi opción, permitiría que Spring adopte FaaS (Función como servicio). FaaS jvm se apagará después de atender su llamada, por lo que lo mantiene en funcionamiento (como un servidor normal) y paga literalmente cada milisegundo o algunas llamadas pueden retrasarse incluso unos segundos (para iniciar todo).
Encontré dos proyectos que están tratando de usar Spring en el entorno FaaS y están abordando este problema, pero en mi opción es más fácil eliminar el problema (reflejos) que tratar de superarlo con trucos.
https://github.com/markfisher/spring-cloud-function
https://github.com/kennyk65/spring-cloud-sin servidor
¿O tal vez hay otra forma de resolver este problema y usar Spring de manera eficiente en FaaS, que no conozco?
Pregunta relacionada: Ejecución de Spring Boot en Amazon Lambda
He estado tratando de usar la aplicación Spring Framework mínima (como 3-5 clases) y todavía toma (a veces) 5-15 segundos para manejar la primera solicitud (la siguiente se maneja en 50-100ms), por lo que minimizar realmente no funciona en este caso.
Estoy en el mismo barco, tratando de encontrar un marco DI compatible con FaaS para JVM. Dado que nada puede vencer al ecosistema Spring en JVM, sería genial si Spring tuviera un mecanismo sin reflejos y tiempo de compilación DI. Sin embargo, no pude encontrar mucho en ese frente.
Micronaut resuelve exactamente el mismo problema y parece interesante. Tiene una capa adaptadora para anotaciones de resorte. Micronaut está especialmente diseñado para arranques más rápidos utilizando el tiempo de compilación DI.
Por supuesto, esto es bueno para aplicaciones más nuevas, pero no para aplicaciones muy grandes con una gran cantidad de código base Spring existente.
Hoy en día, spring-fu podría ser una opción para crear un enfoque sin reflexión de aplicaciones de primavera.
Según su documentación:
Spring Fu es una incubadora para JaFu (Java DSL) y KoFu (Kotlin DSL) diseñada para configurar Spring Boot explícitamente con código de forma declarativa con gran detectabilidad gracias al autocompletado. Proporciona un inicio rápido (40 % más rápido que la configuración automática regular en una aplicación Spring MVC mínima), bajo consumo de memoria y se adapta bien a GraalVM nativo gracias a su enfoque (casi) sin reflejos.
Nota: no se supone que spring-fu se use en producción .