SpringBoot实战一:五分钟创建第一个Web应用

本文的实验操作步骤放在第三步骤,第二部分是理论讲解

一、实验目标

  • 使用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 相关类,若存在且用户未手动定义 DataSource Bean,则自动配置默认数据源。
  • 优先级机制 :自动配置类可通过 @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、测试

打开浏览器访问地址

相关推荐
fanruitian42 分钟前
Java 静态代码块
java·开发语言
IUGEI1 小时前
【后端开发笔记】JVM底层原理-垃圾回收篇
java·jvm·笔记·后端
迈巴赫车主1 小时前
蓝桥杯 20541魔法科考试
java·数据结构·算法·蓝桥杯
饭饭大王6661 小时前
Python 模块的概念与导入:从基础语法到高级技巧
java·服务器·python
u***1371 小时前
SpringBoot项目整合Knife4J
java·spring boot·后端
佐杰1 小时前
Jenkins备份管理
java·运维·jenkins
q***47181 小时前
MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
java·数据库·mysql
DolphinScheduler社区2 小时前
图解 Apache DolphinScheduler 如何配置飞书告警
java·大数据·开源·飞书·告警·任务调度·海豚调度
Han.miracle2 小时前
JavaEE —— 网路编程 Socket套接字
java·java-ee