当前位置: 首页 > article >正文

【Spring Boot 应用开发】-01 初识

特性

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序。以下是 Spring Boot 的一些主要特点:

  • 简化配置:Spring Boot 提供了自动配置机制,能够根据类路径中的依赖自动配置 Spring 应用。例如,如果在类路径中存在 H2 数据库驱动,它会自动配置一个内存数据库。

  • 独立运行:使用内嵌的服务器(如 Tomcat 或 Jetty),Spring Boot 应用可以被打包成 JAR 文件并直接运行,而不需要外部部署环境。

  • 起步依赖:通过定义一组对常用功能的依赖描述符(即 Starter 依赖),简化了 Maven 或 Gradle 构建配置。比如 spring-boot-starter-web 包含了构建 Web 应用所需的所有依赖。

  • 健康检查与监控:内置了 Actuator 模块,提供了应用健康状态检查、度量指标收集等功能,有助于运维和监控。

  • 命令行接口:提供了一个 CLI 工具,允许用户直接在命令行编写 Groovy 脚本来快速测试 Spring 功能。

  • 开发工具支持:包括热部署、远程调试等特性,提高了开发效率。

  • 非功能性特性:开箱即用地支持多种非功能性需求,如安全性、批处理、消息传递等。

示例

要开始使用 Spring Boot,您只需要添加适当的依赖到您的项目中,并创建一个带有 @SpringBootApplication 注解的主类即可启动应用程序。下面是一个简单的 Hello World 示例:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RestController
    class HelloWorldController {

        @GetMapping("/hello")
        String hello() {
            return "Hello, World!";
        }
    }
}

这段代码定义了一个 RESTful Web 服务,当访问 /hello 路径时会返回 "Hello, World!" 字符串。

pom配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.4</version> <!-- 请根据需要选择合适的Spring Boot版本 -->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>bear-springboot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

工程结构
在这里插入图片描述
访问
在这里插入图片描述

这样一个最简单的springboot后端工程就搞定了,非常简单,不需要额外的配置、不需要tomcat或者别的服务器、不需要引入各种依赖jar包。这就是文章开头说的:

其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序

也就说,Spring Boot 并不是新创造的东西,它是基于Spring框架,提供一整套更方便的开发框架和方式。那么SpringBoot是怎么做到的?我们看看启动类的代码都干了什么。

代码解释

1. 包声明

package org.example;
  • 这行代码指定了该 Java 类所在的包名为 org.example。包名用于组织和命名空间隔离,确保类名在不同项目中不会冲突。

2. 导入语句

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
  • org.springframework.boot.*: 导入了 Spring Boot 的核心类库,包括启动应用程序所需的类。
  • org.springframework.boot.autoconfigure.*: 导入了自动配置相关的类,Spring Boot 会根据这些配置自动设置应用程序环境。
  • org.springframework.web.bind.annotation.*: 导入了构建 RESTful Web 服务所需的注解,如 @RestController@GetMapping

3. 主类定义

@SpringBootApplication
public class Application {
  • @SpringBootApplication: 这是一个组合注解,包含了以下三个注解的功能:
    • @Configuration: 标识该类为配置类,允许使用 @Bean 注解来定义组件。
    • @EnableAutoConfiguration: 启用 Spring Boot 的自动配置机制,根据类路径中的依赖自动配置应用程序。
    • @ComponentScan: 自动扫描并注册带有 @Component@Service@Repository 等注解的类为 Spring Bean。

4. 主方法

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
  • main 方法是应用程序的入口点。
  • SpringApplication.run(Application.class, args):创建并启动 Spring Boot 应用程序。它会执行以下操作:
    • 解析命令行参数。
    • 初始化 Spring 应用上下文(ApplicationContext)。
    • 执行自动配置。
    • 启动内嵌的服务器(如 Tomcat),如果应用包含 Web 组件。

5. 内部控制器类

@RestController
class HelloWorldController {

    @GetMapping("/hello")
    String hello() {
        return "Hello, World!";
    }
}
  • @RestController: 将该类标记为一个 RESTful 控制器,所有方法返回的内容将直接作为 HTTP 响应体返回给客户端。
  • HelloWorldController 是一个内部类,定义了一个简单的 REST API。
    • @GetMapping("/hello"): 指定该方法处理 HTTP GET 请求,路径为 /hello
    • String hello(): 当访问 /hello 路径时,该方法被调用并返回字符串 "Hello, World!"

总结

其实,关键就是SpringApplication.run(Application.class, args),在启动的时候干了各种事情,解析注解、生成上下文、启动tomcat等,后续会有篇幅具体解析下这个启动函数干了什么,从源码的层面加深理解。


http://www.kler.cn/a/501654.html

相关文章:

  • 中等难度——python实现电子宠物和截图工具
  • 使用RSyslog将Nginx Access Log写入Kafka
  • 项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)
  • 后端Java开发:第十二天
  • 标准应用 | 2025年网络安全服务成本度量实施参考
  • 数据分析思维(十一):应用篇——用数据分析解决问题
  • 夯实前端基础之CSS篇
  • Edge浏览器内置的截长图功能
  • 品牌账号矩阵如何打造?来抄作业
  • Vue3.5 企业级管理系统实战(一):项目初始搭建与配置
  • 16_Redis Lua脚本
  • uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验
  • FPGA随记——时钟时序一些基本知识
  • 网工考试——网络安全
  • C#中简单Socket编程
  • 【Uniapp-Vue3】onShow和onHide钩子的对比和执行顺序
  • RabbitMQ-SpringAMQP使用介绍
  • FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )
  • LeetCode 438. 找到字符串中所有字母异位词 (C++实现)
  • 网易云音乐登录两部手机:IP属地归属何方?
  • 学生公寓安全用电管理的特点
  • 不同音频振幅dBFS计算方法
  • 【芯片封测学习专栏 -- Substrate | RDL Interposer | Si Interposer | 嵌入式硅桥(EMIB)详细介绍】
  • 【河南乡镇界】arcgis格式shp数据乡镇名称和编码内容测评
  • hutool糊涂工具通过注解设置excel宽度
  • 深入解析 ZooKeeper:分布式协调服务的原理与应用