spring-projects/spring-framework
Fun facts
Trivia and curiosities you may not need but might enjoy.
The earliest commit in this repository is from July 2008
The repository's first commit (8119659fb1 — "Initial structure") is dated 2008-07-10, and the second commit (549e526ab0 — "Added spring-build") is the same day. The Spring Framework as a project predates this by roughly five years; the 2008 dates mark the migration to git-shaped infrastructure.
SpEL was first checked in within a month of the repo's creation
The very first commit titled "First drop of SPEL" (c2624ea05e) lands on 2008-08-12, just over a month after the initial structure went in. The Spring Expression Language has been a first-class part of the codebase from the start.
A small team, an enormous codebase
Across the entire last year, the top five committers — Sam Brannen, Juergen Hoeller, Rossen Stoyanchev, Sébastien Deleuze, and Brian Clozel — together produced >1,600 commits out of a total just above 1,800. That's a >88% concentration in five hands. Spring Framework is maintained by a remarkably small core team relative to its footprint.
The largest module is the test framework
Counting Java files alone, spring-test is the biggest module at ~1,371 files. It contains the TestContext framework, MockMvc, WebTestClient, and a small forest of test fixtures used by every other module. The "framework that helps you test the framework" is bigger than the framework's web layer.
Spring ships its own copy of ASM, CGLIB, and Objenesis
spring-core repacks (shades) ASM, CGLIB, Objenesis, and JavaPoet into the org.springframework.asm.*, org.springframework.cglib.*, etc. packages so that user applications never see version conflicts. The repacking is configured in spring-core/spring-core.gradle via the com.gradleup.shadow plugin. End users importing Spring will not see these libraries on their classpath under their original names.
Two web stacks live in one repo
spring-webmvc (Servlet, blocking, since Spring 1.x) and spring-webflux (reactive, since Spring 5.0 in 2017) coexist in the repository. They share roughly spring-web as foundation but have entirely separate dispatcher pipelines. The framework deliberately maintains both — Spring did not deprecate MVC when Reactive arrived. The intent has always been: pick the model that fits your app, not the newer one by default.
spring-instrument has only two source files
The spring-instrument module is a single-purpose JVM agent for class instrumentation (used by load-time AspectJ weaving). Its spring-instrument/src/main/java/ directory has just two .java files. It is among the smallest published Spring artifacts.
The spring-aspects module is in AspectJ, not Java
While most of Spring is Java (with a healthy minority of Kotlin), the spring-aspects module compiles AspectJ source files using the io.freefair.aspectj plugin. The *.aj and *.java files in that module describe annotation-driven aspects (@Transactional, @Async, @Cacheable) for compile-time and load-time weaving, not runtime proxies.
spring-core is a multi-release JAR
spring-core is built with the project's custom multiReleaseJar Gradle plugin and ships JDK-21 and JDK-24-specific override classes (META-INF/versions/21/ and META-INF/versions/24/ inside the JAR). Most users will never know.
Snapshots, milestones, RC, GA — all in the same minute
The repository's tag list shows alternating 6.2.x and 7.0.x release tags being cut from the same main branch in close succession (e.g., v7.0.7 and v6.2.18 released within the same week). The team maintains parallel maintenance branches (6.2.x, 7.0.x) and routinely merges fixes between them. The very HEAD commit is "Merge branch '7.0.x'", and the snapshot version is 7.1.0-SNAPSHOT.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.