spring boot(一)依赖管理

SpringBoot简化了Spring应用的搭建和开发,通过自动配置和starter实现快速配置。它整合了SpringMVC和Spring,提供了云原生时代的解决方案。微服务架构将应用拆分为小型服务,SpringBoot结合SpringCloud解决分布式挑战。自动配置能自动配置Tomcat、SpringMVC等,依赖管理通过父项目约定版本,starter启动器则按需引入场景依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot基础

介绍

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特有的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种快速配置的方式,Spring Boot在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

  • 特有的配置方式:

使用yml或者properties配置文件进行所有场景的配置(例如spring mvc,mybatis等场景的配置),同时提供了一个注解进行Spring Boot组件的扫描。

  • 框架基础:

Spring Boot = Spring MVC + Spring

在现在的Sping大家族中,Spring Boot是spring生态圈的基础,整个spring生态圈都可以基于spring boot去进行开发。

在这里插入图片描述

  • 总结
- spring boot是整合spring技术栈的一站式框架。
- spring boot是简化spring技术栈的快速开发脚手架。

 

时代背景

微服务

  • 微服务是一种架构风格。
  • 一个应用拆分为一组小型服务(分成多个spring cloud项目)。
  • 服务之间使用轻量级HTTP进行交互。
  • 服务围绕业务功能进行拆分。
  • 可以进行自动化部署。
  • 去中心化,可以服务自治,一个应用可以不用同一门语言开发。

 

分布式的困难

  • 远程调用
  • 服务发现
  • 负载均衡
  • 服务容错
  • 配置管理
  • 服务监控
  • 链路追踪
  • 日志管理
  • 任务调度

解决方案:Spring Cloud + Spring Boot

 

云原生

原生应用如何上云,即Cloud Native

上云的困难:

  • 服务自愈
  • 弹性伸缩
  • 服务隔离
  • 自动化部署
  • 灰度发布
  • 流量治理

 

基础知识

依赖管理

  1. 依赖方式

Spring Boot使用一个父项目,将开发中经常用到的依赖的对应版本都规定好了,在引入依赖的时候通过父类引入相应的版本即可。这种方式称为Spring Boot的版本仲裁。例如:

自己项目的pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>

其父项目为spring-boot-starter-parent。

spring-boot-starter-parent-2.2.5.RELEASE.pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

其父项目为spring-boot-dependencies。

spring-boot-dependencies.pom

在这个文件中就定义了各种依赖的版本,例如:

<properties>
    <commons-codec.version>1.13</commons-codec.version>
    <commons-dbcp2.version>2.7.0</commons-dbcp2.version>
    <commons-lang3.version>3.9</commons-lang3.version>
    <commons-pool.version>1.6</commons-pool.version>
    <commons-pool2.version>2.7.0</commons-pool2.version>
    <jackson.version>2.10.2.20200130</jackson.version>
    <jackson-bom.version>${jackson.version}</jackson-bom.version>
    <jedis.version>3.1.0</jedis.version>
    <junit.version>4.12</junit.version>
    <junit-jupiter.version>5.5.2</junit-jupiter.version>
    <kafka.version>2.3.1</kafka.version>
    <log4j2.version>2.12.1</log4j2.version>
    <logback.version>1.2.3</logback.version>
    <lombok.version>1.18.12</lombok.version>
    ...
  </properties>

即依赖方式如下:

在这里插入图片描述


备注:如果要将本地项目中的依赖修改成别的版本,可以在自己的pom文件中进行类似如下的修改。
<properties>
    <mysql.version>5.1.7</mysql.version>
 </properties>

  1. 场景启动器-starter

在依赖中类似于spring-boot-starter-*的依赖表示引入某个场景下所需要的所有依赖,例如spring-boot-starter-web就会引入所有和web开发相关的依赖(例如tomcat,spring-mvc等)。

- 备注:spring boot官网提供的<a href="https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/using-spring-boot.html#using-boot-starter">starter的网址</a>
https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/using-spring-boot.html#using-boot-starter

- 如果是“*-spring-boot-starter”命名的方式就是一些第三方提供的场景启动器。

所有场景启动器的底层依赖为:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.2.5.RELEASE</version>
    <scope>compile</scope>
</dependency>

启动器的依赖管理是根据maven的依赖特性来进行管理的,在IDEA中可以通过Ctrl+Shift+Alt+U来查看一个pom文件的依赖树。

 

自动配置

Spring Boot会自动帮助我们配好很多依赖的配置(例如tomcat,spring mvc等配置)。一个新建的基础项目会帮我们自动配置好如下内容:

  1. 自动配置Tomcat

    • spring boot会自动引入tomcat依赖(在spring-boot-starter-web中)。

    • 自动配置好tomcat相关的默认配置。


  1. 自动配置好Spring MVC
    • 引入Spring MVC全套组件。
    • 自动配置好Spring MVC常用的组件,例如DispatchServlet,ViewResolver等。

  1. 自动配置好web常见的功能,例如字符编码问题和文件上传等。

备注:我们可以在Spring Boot的启动类中查看Spring容器中已经配置好的对象

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Application.class, args);
        // 获取Spring 容器中所有bean对象的名称
        String[] beanDefinitionNames = run.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
    }
}

可以查看spring bean容器中所有的实例对象,包括自动配置的和我们自己定义的。

  1. 配置好默认的包结构

Spring Boot有自己规定好的包结构:

- project
	- src
		-main
			- java
				package
					- controller
					- service
					xxxApplication.java
			- resources
				application.yml | application.properties
		-test
			- java
			- resources
  • 即在源代码的根路径中要创建一个xxxApplication.java用来作为Spring Boot的唯一入口。

  • 其配置文件只能是.yml或者.properties文件

在这种约定格式下无需再配置包扫描。同时Spring Boot也允许我们配置包扫描的路径,即使用

- @SpringBootApplication(scanBasePackages="cn.net.smrobot")
或者
- @ComponentScan("cn.net.smrobot")

注意:在Spring Boot中约定大于配置!!!


  1. 各种配置都有默认的值

    Spring Boot会将配置映射到某一个类上的属性值上,同时将该类注入到Spring容器中。


  1. 按需加载所有的自动配置项

引入哪些场景就会开启该场景下的自动配置。Spring Boot的所有自动配置功能都在spring-boot-autoConfigure包里面,该包下的类不一定会生效,只会按需加载(是@Conditional注解在起作用)。

- 备注:spring boot配置的<a href="https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/appendix-application-properties.html#common-application-properties">官网</a>
https://docs.spring.io/spring-boot/docs/2.4.4/reference/html/appendix-application-properties.html#common-application-properties

Hello项目

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
//开启自动配置
@EnableAutoConfiguration
// 配置包扫描
@ComponentScan
public class Application {

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

}

// controller.HelloController.java
package cn.net.smrobot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 声明为controller
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值