Spring Fu is an incubator for new Spring features related to explicit configuration and runtime efficiency.
While regular Spring Boot applications are configured using annotations, conventions and automatic configuration based on conditions like "Is this class available in the classpath?", Spring Fu provides an explicit way of configuring Spring Boot applications with a Kotlin DSL (Kofu) or a Java DSL (Jafu) using functional bean definitions for both Spring Boot infrastructure and application code.
It has following characteristics:
-
Explicit configuration via Kotlin or Java DSL instead of annotations
-
Minimal set of features enabled by default
-
No classpath scanning, no feature enabled based on classpath detection
-
Both declarative (via the DSL) and programmatic (code auto-complete, allow any kind of
if
,for
statements) -
Functional configuration based on pure lambdas
-
Minimal reflection usage, no CGLIB proxy, no annotation processing
-
Faster startup and lower memory consumption
-
GraalVM native image friendly
The project also incubates various other features like Coroutines or GraalVM support. You can see the roadmap for more details.
It is not intended to be used in production, but rather to incubate and get feedback and contributions from the community in order to reach a point where its features can be integrated as part of existing Spring projects like Framework, Boot and Data.
In addition to the whole Spring and Reactor teams, special credits to:
-
Juergen Hoeller for his support on Kotlin and the functional bean registration API
-
Arjen Poutsma for creating the WebFlux functional API
-
Thomas Girard for its spring-webflux-kotlin-dsl experiment that initially demonstrated this approach was possible
-
Konrad Kaminski for his awesome spring-kotlin-coroutine project
-
Dave Syer for his work on benchmarks, GraalVM support and functional bean registration applied to Boot
-
The whole Spring Boot team