SpringBoot源码解读一【框架引用】

SpringBoot源码解读

SpringBoot已经成为众多企业开发Java项目的必备框架,即使是微服务框架SpirngCloud也基于SpringBoot。对SpringBoot的研究可以进一步提高我们的专业技能。本人利用业余时间研究下SpringBoot底层实现。代码这东西看的时候能懂,但看完容易忘。因此,做个笔记,也分享给有需要的同学



准备

版本信息

  • JDK 1.8
  • SpringBoot 2.6.7 (不同版本底层有些差异)
  • 开发工具 IDEA

一、项目构建

构建方式

方法一:生成maven项目、添加springboot依赖

方法二:IDEA插件 Spring Assistant,通过Spring助手生成SpringBoot项目

代码

项目信息

  • groupId(组织标识):com.walker
  • artifactId(项目标识):spring-boot-study
  • version(版本):0.0.1-SNAPSHOT

pom.xml

	<?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 https://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>2.6.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.walker</groupId>
    <artifactId>spring-boot-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-study</name>
    <description>spring-boot-study</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


SpringBootStudyApplication

package com.walker.springboot.study;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootStudyApplication {

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

}

编写Controller:HelloController

package com.walker.springboot.study;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@Slf4j
public class HelloController {


    @GetMapping("/")
    String index() {
        return "Hello Spring boot!";
    }

}

运行

执行SpringBootStudyApplication的main函数即可

访问地址:127.0.0.1:8080/

二、分析

1. spring-boot-starter-web不需要指定版本

我们可以看到引入的时候没有写version标签

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

点开spring-boot-starter-parent 的poml文件,内容如下

  • 有一个父项目spring-boot-dependencies
  • resources标签下定义了一些资源文件
  • pluginManagement 定义了一些插件信息 包括spring-boot-maven-plugin

在这里面没有发现版本的定义信息,打开dependencies的pom文件,发现里面定义了很多包的版本信息,且依赖放在dependencyManagement标签里面,内容太多就不贴了

打开maven官网
依赖介绍
对dependency management的定义如下:

The dependency management section is a mechanism for centralizing dependency information. When you have a set of projects that inherit from a common parent, it’s possible to put all information about the dependency in the common POM and have simpler references to the artifacts in the child POMs.

简单来讲就是:集中管理依赖信息,抽取公共依赖,简化子项目的依赖配置。

dependencyManagement应用场景

当我们项目中不同模块依赖相同jar包时,把共同依赖定义在父项目的dependencyManagement标签中,这样在进行依赖包的版本管理时,只需要修改一个地方。 简化了依赖包的版本管理

2.如果当前项目已经有父项目,如何引入SpringBoot

引入spring-boot-dependencies

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.6.7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • type 是必须要有的。默认是:jar,可以不填写
  • scope:import 可以导入托管的依赖。简单来讲,就是把dependencies管理的依赖合并到当前项目中

总结

本文主要描述了SpringBoot框架的使用,下一篇将正式进入源码的讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值