1. Springboot
    1. Spring简介
    2. SpringBoot简介
    3. SpringBoot运行过程
    4. SpringBoot模块内文件结构
    5. SpringBoot多模块文件结构
    6. pom.xml文件结构
    7. maven
    8. 注解

Springboot

Spring简介

基于 Java 的开放源代码应用框架,使用spring,不需要从头开始编写,只需要在类上面加上注解,Spring会自动把类实例化放进仓库,可以通过注解自动连接业务层与数据库层。

在spring中,需要将依赖的第三方库的jar包添加到类路径中,包括嵌套依赖、互相依赖的包,还有大量版本问题。

SpringBoot简介

对spring的进一步封装,自动管理依赖版本,自动化配置,减少开发工作量。内嵌Servlet容器,能把应用自动打成jar包启动,简化应用运行

SpringBoot运行过程

  1. 启动

    main()
        ↓
    SpringApplication.run()
        ↓
    创建 Spring 容器(ApplicationContext)
        ↓
    扫描 Bean
        ↓
    自动配置
        ↓
    启动 Tomcat
        ↓
    监听 8080
        ↓
    等待 HTTP 请求
    
  2. 监听

    Tomcat接收HTTP请求
        ↓
    DispatcherServlet
        ↓
    Controller
        ↓
    Service
        ↓
    Repository
        ↓
    数据库
    

SpringBoot模块内文件结构

src
├── main
│
├── java
│   └── com.xxx.demo
│       ├── Application.java
│       ├── controller
│       ├── service
│       ├── mapper
│       ├── entity
│       ├── dto
│       ├── vo
│       ├── config
│       └── common
│
└── resources
    ├── application.yml
    ├── mapper
    └── logback.xml
  1. Application.java

    启动入口,扫描项目,自动配置Mysql、Redis等,启动SpringBoot.

  2. Controller

    负责 HTTP 接口,接收请求,校验参数,返回结果。

  3. Service

    业务层,负责业务逻辑、事务控制、调用Repository。

  4. Repository / Mapper

    数据访问层,负责数据库操作,

  5. Entity

    数据库实体,对应数据表。

  6. DTO

    请求对象,接收前端参数。

  7. VO

    返回对象,发给前端。

  8. Config

    配置类

  9. Common

    公共部分

  10. resources

SpringBoot多模块文件结构

backend
│
├── pom.xml
│
├── common
│
├── admin-server
│
├── knowledge-core
│
├── retrieval-core
│
├── workflow-core
│
├── agent-core
│
└── infra

admin-server是启动模块,负责对外提供接口和业务。

common是公共基础能力模块,不负责具体业务,不启动服务。

  1. common

    工具模板,包含统一返回类,全局异常,通用枚举,通用常量,工具类,通用模型等。

  2. admin-server

    SpringBoot启动模块,负责启动 SpringBoot,提供 HTTP API,接收前端请求,参数校验,权限校验,调用 core 模块,编排业务流程,返回 VO。

pom.xml文件结构

父pom负责版本、模块和插件配置。

模块pom负责自己需要什么依赖,是否能启动,如何打包。

  1. modelVersion

    Maven POM 模型版本,固定写法,基本不用改。

    <modelVersion>4.0.0</modelVersion>
    
  2. parent

    继承父工程,自动管理相关依赖和插件等。

    父pom继承springboot官方工程。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.0</version>
        <relativePath/>
    </parent>
    

    子pom继承父工程。

    <parent>
        <groupId>io.junhaohan</groupId>
        <artifactId>backend</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    
  3. groupId

    项目组织名,标识项目归属。

    一般只写在父pom中,子pom不写或者只写common。

    <groupId>io.junhaohan</groupId>
    
  4. artifactId

    当前父工程名称,标识这个maven工程。

    <artifactId>backend</artifactId>
    
  5. version

    项目版本号,用于模块依赖和发布jar包。

    子工程中通常不写。

    <version>0.0.1-SNAPSHOT</version>
    
  6. packaging(父工程pom专有)

    pom表示该工程只是聚合工程,不生成普通jar,不启动springboot,不需要src目录,只管理子模块。

    子模块默认为jar,表示该工程为普通java模块,一般不写。

    <packaging>pom</packaging>
    
  7. name

    项目名称对外展示,可不写。

    <name>backend</name>
    
  8. description

    说明项目用途,可不写。

    <description>AI Knowledge Governance Platform Backend</description>
    
  9. license(父pom)

    声明开源许可证。

    <licenses>
        <license>
            <name>Apache License 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0</url>
        </license>
    </licenses>
    
  10. developers(父pom)

    声明开发者信息。

    <developers>
        <developer>
            <id>varus1088</id>
            <name>HH J</name>
        </developer>
    </developers>
    
  11. scm(父pom)

    源码仓库信息。

    <scm>
        <connection>scm:git:...</connection>
        <developerConnection>scm:git:...</developerConnection>
        <url>...</url>
    </scm>
    
  12. properties

    定义变量,方便统一管理。

    子模块一般不写,除非有特殊需求。

    <properties>
        <java.version>21</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-ai.version>1.0.0</spring-ai.version>
        <mybatis-plus.version>3.5.12</mybatis-plus.version>
    </properties>
    
  13. modules

    声明当前父工程管理哪些子模块,Maven 构建父工程时,会按模块依赖顺序构建;

    子模块不需要。

    <modules>
        <module>common</module>
        <module>infra</module>
        <module>knowledge-core</module>
        <module>retrieval-core</module>
        <module>workflow-core</module>
        <module>agent-core</module>
        <module>mcp-client</module>
        <module>admin-server</module>
    </modules>
    
  14. dependencyManagement(父模块)

    管理依赖版本,不会真正引入依赖。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  15. dependencies(子模块)

    引入具体依赖,版本在父pom中管理即可。

    <dependencies>
        <dependency>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  16. build(父工程)

    管理插件。

    <build>
        <pluginManagement>
            <plugins>
                ...
            </plugins>
        </pluginManagement>
    </build>
    
  17. pluginManagement

    管理插件版本和默认配置,不一定执行。

    子模块中一般不放。

  18. plugins

    启用插件。一般在子模块中按需使用。

    <build>
        <plugins>
            ...
        </plugins>
    </build>
    
  19. resources

    配置资源文件打包方式。

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    
  20. repositories

    配置 Maven 下载依赖的远程仓库,一般不写在pom里,而是放在settings.xml中。

    <repositories>
        <repository>
            <id>aliyun</id>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    
  21. profiles

    Maven 构建环境区分,如测试环境和正式环境

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>
    </profiles>
    

maven

clean可选执行,其他部分默认从validate开始执行。

clean 清理旧的编译产物,避免旧代码、旧 class、旧 jar 影响新构建。
validate
compile 编译 main 代码
test 编译 test 代码,执行单元测试
package 生成jar包
verify
install 将jar包安装到本地 Maven 仓库(~/.m2/repository)以便其他模块引用
site
deploy

注解

@RestController

@GetMapping

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。