The @EnableAutoConfiguration annotation only turns on Spring Boot's auto-configuration. It does not find your own beans (for example classes marked with @Component or @Controller). To find them, we must also add @ComponentScan. Read more about component scanning in Spring Core.
In real projects, most people use @SpringBootApplication instead. It already combines @SpringBootConfiguration, @EnableAutoConfiguration and @ComponentScan. This tutorial uses the two annotations separately so that you can see what each one does.
plugins {
java
id("org.springframework.boot") version "4.1.2"
id("io.spring.dependency-management") version "1.1.7"
}
println(">>> EXECUTING SCRIPT: build.gradle.kts (Kotlin DSL)")
group = "com.logicbig.example"
version = "1.0-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_25
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
}
plugins {
id 'java'
id 'org.springframework.boot' version '4.1.2'
id 'io.spring.dependency-management' version '1.1.7'
}
println ">>> EXECUTING SCRIPT: build.gradle (Groovy DSL)"
group = 'com.logicbig.example'
version = '1.0-SNAPSHOT'
java {
sourceCompatibility = JavaVersion.VERSION_25
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Java Classes
package com.logicbig.example;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
public String getMessage () {
return "a message from MyBean";
}
}
package com.logicbig.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyWebController {
@Autowired
private MyBean myBean;
@RequestMapping("/")
@ResponseBody
public String theHandler () {
return myBean.getMessage();
}
}
package com.logicbig.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration
public class EnabledAutoConfigScanExample {
public static void main(String[] args) {
SpringApplication.run(EnabledAutoConfigScanExample.class, args);
}
}
2026-11-09T01:19:37.257-06:00 INFO 30132 --- [ main] c.l.e.EnabledAutoConfigScanExample : Starting EnabledAutoConfigScanExample using Java 25 with PID 30132 (D:\LogicBig\example-projects\spring-boot\spring-boot-scanning\target\classes started by joe2 in D:\LogicBig\example-projects\spring-boot\spring-boot-scanning) 2026-11-09T01:19:37.261-06:00 INFO 30132 --- [ main] c.l.e.EnabledAutoConfigScanExample : No active profile set, falling back to 1 default profile: "default" 2026-11-09T01:19:38.362-06:00 INFO 30132 --- [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2026-11-09T01:19:38.382-06:00 INFO 30132 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2026-11-09T01:19:38.382-06:00 INFO 30132 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.27] 2026-11-09T01:19:38.448-06:00 INFO 30132 --- [ main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 1132 ms 2026-11-09T01:19:38.908-06:00 INFO 30132 --- [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' 2026-11-09T01:19:38.917-06:00 INFO 30132 --- [ main] c.l.e.EnabledAutoConfigScanExample : Started EnabledAutoConfigScanExample in 2.173 seconds (process running for 2.694)
If we do not set any packages with ComponentScan(basePackages) or ComponentScan(basePackageClasses), Spring scans the package of the class that declares the annotation, and all of its sub-packages.
In above example, we ran the main class directly from IntelliJ IDEA. Alternatively, you can execute it from the command line using your build tool:
Maven:mvn spring-boot:run
Gradle:gradle bootRun
Output
$ curl -s "http://localhost:8080" a message from MyBean
Example Project
Dependencies and Technologies Used:
Spring Boot 4.1.2 Corresponding Spring Framework Version 7.0.10 Version Compatibility: 2.0.0.RELEASE - 4.1.2Version List
×
Version compatibilities of spring-boot-starter-parent with this example:
2.0.0.RELEASE
2.0.1.RELEASE
2.0.2.RELEASE
2.0.3.RELEASE
2.0.4.RELEASE
2.0.5.RELEASE
2.0.6.RELEASE
2.0.7.RELEASE
2.0.8.RELEASE
2.0.9.RELEASE
2.1.0.RELEASE
2.1.1.RELEASE
2.1.2.RELEASE
2.1.3.RELEASE
2.1.4.RELEASE
2.1.5.RELEASE
2.1.6.RELEASE
2.1.7.RELEASE
2.1.8.RELEASE
2.1.9.RELEASE
2.1.10.RELEASE
2.1.11.RELEASE
2.1.12.RELEASE
2.1.13.RELEASE
2.1.14.RELEASE
2.1.15.RELEASE
2.1.16.RELEASE
2.1.17.RELEASE
2.1.18.RELEASE
2.2.0.RELEASE
2.2.1.RELEASE
2.2.2.RELEASE
2.2.3.RELEASE
2.2.4.RELEASE
2.2.5.RELEASE
2.2.6.RELEASE
2.2.7.RELEASE
2.2.8.RELEASE
2.2.9.RELEASE
2.2.10.RELEASE
2.2.11.RELEASE
2.2.12.RELEASE
2.2.13.RELEASE
2.3.0.RELEASE
2.3.1.RELEASE
2.3.2.RELEASE
2.3.3.RELEASE
2.3.4.RELEASE
2.3.5.RELEASE
2.3.6.RELEASE
2.3.7.RELEASE
2.3.8.RELEASE
2.3.9.RELEASE
2.3.10.RELEASE
2.3.11.RELEASE
2.3.12.RELEASE
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.4.7
2.4.8
2.4.9
2.4.10
2.4.11
2.4.12
2.4.13
2.5.0
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.5.7
2.5.8
2.5.9
2.5.10
2.5.11
2.5.12
2.5.13
2.5.14
2.5.15
2.6.0
2.6.1
2.6.2
2.6.3
2.6.4
2.6.5
2.6.6
2.6.7
2.6.8
2.6.9
2.6.10
2.6.11
2.6.12
2.6.13
2.6.14
2.6.15
2.7.0
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
2.7.7
2.7.8
2.7.9
2.7.10
2.7.11
2.7.12
2.7.13
2.7.14
2.7.15
2.7.16
2.7.17
2.7.18
Java 17 min
3.0.0
3.0.1
3.0.2
3.0.3
3.0.4
3.0.5
3.0.6
3.0.7
3.0.8
3.0.9
3.0.10
3.0.11
3.0.12
3.0.13
3.1.0
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.1.6
3.1.7
3.1.8
3.1.9
3.1.10
3.1.11
3.1.12
3.2.0
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.2.7
3.2.8
3.2.9
3.2.10
3.2.11
3.2.12
3.3.0
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
3.3.8
3.3.9
3.3.10
3.3.11
3.3.12
3.3.13
3.4.0
3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
3.4.6
3.4.7
3.4.8
3.4.9
3.4.10
3.4.11
3.4.12
3.4.13
3.5.0
3.5.1
3.5.2
3.5.3
3.5.4
3.5.5
3.5.6
3.5.7
3.5.8
3.5.9
3.5.10
3.5.11
3.5.12
3.5.13
3.5.14
3.5.15
3.5.16
4.0.0
4.0.1
4.0.2
4.0.3
4.0.4
4.0.5
4.0.6
4.0.7
4.0.8
4.0.9
4.1.0
4.1.1
4.1.2
Versions in green have been tested.
spring-boot-starter-web (Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container (deprecated in favor of spring-boot-starter-webmvc))
JDK 25
Build Tool:
Spring Boot - @EnableAutoConfiguration with @ComponentScan