本文的实验操作步骤放在第三步骤,第二部分是理论讲解
一、实验目标
- 使用Spring Initializr在5分钟内创建SpringBoot项目
- 理解SpringBoot自动配置原理
二、核心理论
SpringBoot自动配置原理
// SpringBoot通过@SpringBootApplication注解实现自动配置
@SpringBootApplication // 组合注解:包含@Configuration @EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
| 对比角度 | @Configuration |
@EnableAutoConfiguration |
|---|---|---|
| 核心功能 | 手动定义配置和 Bean | 自动根据环境 / 依赖配置 Bean |
| 使用方式 | 标记配置类,配合 @Bean 使用 |
通常通过 @SpringBootApplication 间接使用 |
| 依赖关系 | 是 Spring 核心注解,不依赖 Spring Boot | 是 Spring Boot 特有的自动配置入口 |
| 作用场景 | 自定义 Bean 或配置逻辑 | 简化默认配置,减少手动编码 |
1.1、 @Configuration 注解
作用
标记一个类为配置类 ,用于替代传统的 XML 配置文件,在类中可以通过 @Bean 注解定义 Spring 容器管理的 Bean。
核心特性
- 替代 XML 配置 :传统 Spring 中通过
<bean>标签定义 Bean,@Configuration类配合@Bean可实现完全相同的功能,更符合 Java 代码的编写习惯。 - Bean 定义 :在
@Configuration类中,用@Bean注解修饰方法,方法返回值会被注册为 Spring 容器中的 Bean,默认单例。 - 配置类本身也是 Bean :
@Configuration类会被 Spring 自动注册为容器中的一个 Bean,可被其他组件注入。 - 支持嵌套配置 :可以在
@Configuration类中嵌套其他@Configuration类(通过内部类),简化配置结构。 - CGLIB 代理增强 :Spring 会通过 CGLIB 代理
@Configuration类,确保@Bean方法之间的调用返回的是容器中已注册的 Bean(而非新实例),保证单例特性。
示例
typescript
@Configuration
public class AppConfig {
// 定义一个 Bean,id 默认为方法名 "userService"
@Bean
public UserService userService() {
return new UserService();
}
// 依赖其他 Bean(通过方法调用,Spring 会自动注入)
@Bean
public OrderService orderService() {
return new OrderService(userService()); // 此处调用返回容器中的 userService 实例
}
}
2. @EnableAutoConfiguration 注解
作用
开启 Spring Boot 的自动配置机制,让 Spring Boot 根据项目依赖、类路径资源等自动配置 Spring 容器中的 Bean,简化开发(无需手动编写大量配置)。
核心原理
- 类路径扫描 :Spring Boot 启动时,
@EnableAutoConfiguration会触发对类路径下的META-INF/spring.factories文件的扫描,该文件中定义了大量自动配置类(XXXAutoConfiguration)。 - 条件注解筛选 :自动配置类通常通过
@Conditional系列注解(如@ConditionalOnClass、@ConditionalOnMissingBean等)判断是否满足配置条件,只有条件成立时才会注册对应的 Bean。例如:DataSourceAutoConfiguration会检查类路径是否有 JDBC 相关类,若存在且用户未手动定义DataSourceBean,则自动配置默认数据源。 - 优先级机制 :自动配置类可通过
@AutoConfigureBefore、@AutoConfigureAfter等注解控制加载顺序,确保依赖关系正确。
使用场景
- 通常不单独使用,而是通过
@SpringBootApplication间接生效(@SpringBootApplication包含@EnableAutoConfiguration)。 - 若需排除特定自动配置类,可通过
@EnableAutoConfiguration(exclude = XXXAutoConfiguration.class)实现。
示例
less
// 等价于 @SpringBootApplication(包含 @EnableAutoConfiguration)
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
// 排除特定自动配置类
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class Application { ... }
三、实验操作步骤
1、打开IDEA,选择新建springboot项目

2、选择自己想要添加的依赖,比如:

3、点击创建后,添加为maven项目

4、依赖更新完成后,可以点击运行

5、创建第一个controller
在com.lingyi.springboot_demo包下创建controller包,再创建如下java类
kotlin
package com.lingyi.springboot_demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class HelloController {
/**
* 基础Hello World接口
* @return 欢迎信息
*/
@GetMapping("/hello")
public String sayHello() {
return "Hello World! 当前时间:" + LocalDateTime.now();
}
}
6、重新启动服务

7、测试
打开浏览器访问地址
