= Spring Fu
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 https://github.com/spring-projects/spring-fu/tree/master/kofu/README.adoc[Kotlin DSL (Kofu)] or a https://raw.githubusercontent.com/spring-projects/spring-fu/master/jafu/README.adoc[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
- Functional configuration based on pure lambdas
- Minimal reflection usage, no CGLIB proxy, no annotation processing
- Faster startup and lower memory consumption
- https://github.com/oracle/graal/tree/master/substratevm[GraalVM native image] friendly
The project also incubates various other features like https://github.com/spring-projects/spring-fu/tree/master/coroutines[Coroutines] or GraalVM support. You can see https://raw.githubusercontent.com/spring-projects/spring-fu/master/ROADMAP.adoc[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.
== Getting started
Choose your flavor and follow the documentation:
- https://github.com/spring-projects/spring-fu/tree/master/kofu/README.adoc[Kofu] for Spring Boot applications written in Kotlin
- https://raw.githubusercontent.com/spring-projects/spring-fu/master/jafu/README.adoc[Jafu] for Spring Boot applications written in Java
In addition to the whole Spring and Reactor teams, special credits to:
- https://github.com/jhoeller[Juergen Hoeller] for his support on Kotlin and the functional bean registration API
- https://github.com/poutsma[Arjen Poutsma] for creating the WebFlux functional API
- https://github.com/tgirard12[Thomas Girard] for its https://github.com/tgirard12/spring-webflux-kotlin-dsl[spring-webflux-kotlin-dsl] experiment that initially demonstrated this approach was possible
- https://github.com/konrad-kaminski[Konrad Kaminski] for his awesome https://github.com/konrad-kaminski/spring-kotlin-coroutine[spring-kotlin-coroutine] project
- https://github.com/dsyer[Dave Syer] for his work on benchmarks, GraalVM support and functional bean registration applied to Boot
- The whole https://github.com/spring-projects/spring-boot[Spring Boot] team