Open-Source Wikis

/

Spring Framework

/

By the numbers

spring-projects/spring-framework

By the numbers

Data collected on 2026-04-30 from the main branch (commit 6a62be0992).

Size

The repository is dominated by Java, with a substantial Kotlin contribution and a small amount of Groovy and AspectJ.

Language Source files
Java ~9,184
Kotlin ~390
Groovy ~17
AspectJ (in spring-aspects)
xychart-beta horizontal
    title "Source files by language"
    x-axis ["Java", "Kotlin", "Groovy"]
    y-axis "Files" 0 --> 10000
    bar [9184, 390, 17]

Source vs test files

Category Approximate count
Total Java files ~9,184
Test classes (*Test.java, *Tests.java) ~2,831
Production Java files ~6,353

The test-to-production ratio across the codebase is roughly 1 test class per 2.2 production classes.

Module size (Java files only)

Module Java files
spring-test 1,371
spring-context 1,250
spring-web 1,213
spring-core 1,086
spring-webmvc 590
spring-beans 579
spring-webflux 459
spring-messaging 361
spring-jdbc 353
spring-aop 314
spring-websocket 244
spring-tx 227
framework-docs (snippets/tests) 218
spring-expression 195
spring-jms 185
spring-context-support 128
spring-orm 123
spring-r2dbc 94
spring-core-test 64
spring-context-indexer 45
spring-oxm 43
spring-aspects 40
integration-tests 28
spring-instrument 2

spring-test is the largest single module — much of its code is fixtures and sub-frameworks for testing other Spring modules.

Activity

Recent commit volume

  • Commits in the last 90 days: ~515 (excluding merges from per-author count below)
  • Commits in the last year: ~1,800+
xychart-beta horizontal
    title "Top recent contributors (commits, last year)"
    x-axis ["Sam Brannen", "Juergen Hoeller", "rstoyanchev", "Sébastien Deleuze", "Brian Clozel"]
    y-axis "Commits" 0 --> 700
    bar [585, 380, 261, 214, 192]

The five most active recent contributors are also Spring Framework's long-standing committers; the project's active engineering is concentrated among a small core team plus regular community contributions.

Bot-attributed commits

The Spring Framework repository does not use Dependabot or factory-droid[bot]-style automated commit signers in its history. Bot-attributed commits as a percentage of recent history is effectively 0%. (Note: this only counts commits where a bot is the author or co-author. AI-assisted work performed by humans through inline tools leaves no trace in git history.)

Complexity

Largest modules by source size

The four largest modules (spring-test, spring-context, spring-web, spring-core) together account for roughly half of all Java files in the repository. They are the obvious candidates for further breakdown when reading the codebase top-down.

Multi-release JARs

Two modules ship as multi-release JARs (per their *.gradle files):

  • spring-core — Java 21 and 24 overrides
  • (Other modules use the standard single-release packaging)

This is invisible to users but means spring-core builds against three Java versions to expose JDK-version-specific optimisations.

Dependencies

The framework is conservative with external dependencies. It pulls in:

  • Reactor (projectreactor.io) for reactive support
  • Kotlin standard library (optional) where Kotlin extensions exist
  • Jakarta EE APIs (Servlet, JMS, Persistence, Validation) — usually optional so applications choose the version
  • Logging facade (Apache Commons Logging via JCL-over-SLF4J in tests)
  • Bytecode tooling (ASM, CGLIB, Objenesis) — shaded into spring-core so users don't see them
  • Micrometer for observation/metrics

A complete inventory is in reference/dependencies.

Test infrastructure

Test type Count (approx)
Test classes ending in Test/Tests 2,831
Modules with src/jmh/ benchmarks several (spring-core, spring-context, spring-web, …)

The test stack is JUnit 5 + Mockito + AssertJ + MockK (for Kotlin). See how-to-contribute/testing.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

By the numbers – Spring Framework wiki | Factory