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、测试

打开浏览器访问地址

相关推荐
怒放吧德德16 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆17 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌20 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊21 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang21 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解1 天前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing1 天前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean1 天前
Jackson View Extension Spring Boot Starter
java·后端
Seven971 天前
剑指offer-79、最⻓不含重复字符的⼦字符串
java