Administrator
发布于 2025-04-25 / 0 阅读
0
0

SpringBoot-简化spring开发的神器-202509120156

SpringBoot-简化spring开发的神器-202509120156

SpringBoot-简化spring开发的神器

一 Spring Boot 介绍

1.1 概述

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以

及开发过程。习惯优于配置

1.2 为什么使用Spring Boot

J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。

1.3 Spring Boot是什么

一站式整合所有应用框架的框架;并且完美整合Spring技术栈; https://spring.io/projects

Spring Boot来简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产

品级别的应用

1.4 Spring boot 优点

l 快速创建独立运行的Spring项目以及与主流框架集成

l 使用嵌入式的Servlet容器,应用无需打成WAR包

l starters自动依赖与版本控制

l 大量的自动配置,简化开发,也可修改默认值

l 无需配置XML,无代码生成,开箱即用

l 准生产环境的运行时应用监控

l 与云计算的天然集成

二 项目架构-单体应用

2.1 单体应用

2.2 单体应用(monolith application)

l 就是将应用程序的所有功能都打包成一个独立的单元,可以是 JAR、WAR、EAR 或其它归档格

式。

2.3 单体应用有如下优点

l 为人所熟知:现有的大部分工具、应用服务器、框架和脚本都是这种应用程序;

l IDE友好:像 NetBeans、Eclipse、IntelliJ 这些开发环境都是针对开发、部署、调试这样的单个

应用而设计的;

l 便于共享:单个归档文件包含所有功能,便于在团队之间以及不同的部署阶段之间共享;

l 易于测试:单体应用一旦部署,所有的服务或特性就都可以使用了,这简化了测试过程,因为

没有额外的依赖,每项测试都可以在部署完成后立刻开始;

l 容易部署:只需将单个归档文件复制到单个目录下。

2.4 单体应用的一些不足

l 不够灵活:对应用程序做任何细微的修改都需要将整个应用程序重新构建、重新部署。开发人

员需要等到整个应用程序部署完成后才能看到变化。如果多个开发人员共同开发一个应用程序,

那么还要等待其他开发人员完成了各自的开发。这降低了团队的灵活性和功能交付频率;

l 妨碍持续交付:单体应用可能会比较大,构建和部署时间也相应地比较长,不利于频繁部署,

阻碍持续交付。在移动应用开发中,这个问题会显得尤为严重;

l 受技术栈限制:对于这类应用,技术是在开发之前经过慎重评估后选定的,每个团队成员都必

须使用相同的开发语言、持久化存储及消息系统,而且要使用类似的工具,无法根据具体的场景

做出其它选择;

l 技术债务:“不坏不修(Not broken,don’t fix)”,这在软件开发中非常常见,单体应用尤其如

此。系统设计或写好的代码难以修改,因为应用程序的其它部分可能会以意料之外的方式使用

它。随着时间推移、人员更迭,这必然会增加应用程序的技术债务。

三 项目架构-微服务

3.1 微服务

3.2 微服务的样子

https://www.martinfowler.com/articles/microservices.html 微服务microservices

http://blog.cuicc.com/blog/2015/07/22/microservices/

【RPC(远程过程调用)】:

1、dubbo【传输数据没用HTTP协 议;dubbo协议组装数据】/zookpeer

2、SpringCloud:HTTP+JSON

In short(简言之), the microservice architectural style 【架构风格】[1] is an approach to de

veloping a single application as a suite of small services【独立应用变成一套小服务】, each r

unning in its own process and communicating with lightweight(轻量级沟通) mechanisms(每

一个都运行在自己的进程内(容器)), often an HTTP resource API(用HTTP,将功能写成能接

受请求). These services are built around business capabilities (独立业务能力)and indepen

dently deployable by fully automated deployment machinery(应该自动化独立部署). There

is a bare minimum of centralized management of these services(应该有一个能管理这些服

务的中心), which may be written in different programming languages (独立开发语言)and us

e different data storage technologies(独立的数据存储)


四 SpringBoot初体验

如何完成  页面发送/hello 请求,服务器响应 "ok" 字符串;

4.1 创建maven工程

Jar工程

4.2 引入如下依赖

org.springframework.boot

spring-boot-starter-parent

2.1.3.RELEASE


org.springframework.boot

4.3 增加控制器

4.4 编写主程序

4.5 运行访问

http://localhost:8080/hello

五 SpringBoot-原理-简化依赖和配置

5.1 依赖管理

spring-boot-starter-web

@Controller

public class HelloController {

@ResponseBody

@GetMapping("/hello")

public String handle(){

return "OK!";

}

}

@SpringBootApplication

public class MainApplication {

public static void main(String[] args) {

//Spring应用跑起来...

SpringApplication.run(MainApplication.class, args);

}

}

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ma

ven-4.0.0.xsd">

4.0.0

com.demo

spring-boot-01

0.0.1-SNAPSHOT


org.springframework.boot

spring-boot-starter-parent

2.1.3.RELEASE


org.springframework.boot

spring-boot-starter-web


org.springframework.boot

spring-boot-maven-plugin

七 快速创建SpringBoot应用

7.1 创建Spring Starter Project; 必须联网创建

7.2 选择版本,勾选需要的依赖,这里演示只选择了Spring

Web

7.3 项目结构

l 自动生成主程序类,用于启动项目

l 自动生成静态资源目录及属性配置文

l 自动生成测试类

l 自动增加pom.xml相关依赖配置

7.4 新建类

7.5 运行测试

l 在application.properties设置

l 端口,server.port=8099, http://localhost:8099/hello/world

package com.example.springbootdemo.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

  • @description:
  • @author: likai
  • @date: 2025/4/14 *
  • */

    @RestController

    @RequestMapping("/hello")

    public class HelloWorld {

    @RequestMapping("/world")

    public String helloWorld() {

    return "Hello World";

    }

    }

    l 其他配置

    server.servlet.context-path=/a (上下文路径),http://localhost:8099/a/hell/world

    server.tomcat.max-threads=800

    server.tomcat.uri-encoding=UTF-8

    7.6 浏览器访问

    八 SpringBoot-yml配置文件

    8.1 配置文件

    · SpringBoot使用一个全局的配置文件,配置文件名是固定的;

    · application.properties

    · application.yml

    o 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置

    好;

    o YAML(YAML Ain't Markup Language)

    o YAML A Markup Language:是一个标记语言

    o YAML isn't Markup Language:不是一个标记语言;

    · 标记语言:

    o 以前的配置文件;大多都使用的是 xxxx.xml文件;

    o YAML:以数据为中心,比json、xml等更适合做配置文件;

    o YAML:配置例子

    · XML:

    8.2 YAML语法

    8.2.1 YAML基本语法

    使用缩进表示层级关系

    缩进时不允许使用Tab键,只允许使用空格。

    缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

    大小写敏感

    8.2.2 YAML 支持的三种数据结构

    对象:键值对的集合

    数组:一组按次序排列的值

    字面量:单个的、不可再分的值

    8.3 值的写法

    8.3.1 字面量:普通的值(数字,字符串,布尔)

    k: v:字面直接来写;

    字符串默认不用加上单引号或者双引号;

    "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

    name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

    '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    name: 'zhangsan \n lisi':输出;zhangsan \n lisi

    8.3.2 对象、Map(属性和值)(键值对):

    k: v:在下一行来写对象的属性和值的关系;注意缩进

    server:

    port: 8099

    8099

    对象还是k: v的方式

    行内写法:

    friends: {lastName: zhangsan,age: 18}

    8.3.3 数组(List、Set)

    用- 值表示数组中的一个元素

    九 SpringBoot-自动配置原理

    9.1 自动配置原理

    SpringBoot所有的东西都自动配置好了;

    l 自动配置原理:

    1)、主程序类标注了@SpringBootApplication注解相当于标注了@EnableAutoConfiguration

    2)、@EnableAutoConfiguration 开启SpringBoot的自动配置功能

    l 就会自动的将所有的自动配置类导进来

    核心注解 @SpringBootApplication

    @EnableAutoConfiguration

    friends:

    lastName: zhangsan

    age: 20

    pets:

    ‐ cat

    ‐ dog

    ‐ pig

    1 自动导包配置注解,里面是@Import(AutoConfigurationPackages.Registrar.class)

    进入Registrar类,打个断点可以看到传来的值是启动类所在的包路径

    metadata:注解元信息,也就是这个注解修饰的类的全路径类名

    register:扫描注解所在的类的包下的所有组件,并注册进容器,也就是SpringAnnotateApplicati

    on所在的包。所以springboot,默认自动导入SpringAnnotateApplication所在的包下的所有组

    件。

    2.@Import({AutoConfigurationImportSelector.class})

    this.autoConfigurationAnnotation: 这是一个指向@EnableAutoConfiguration注解的引用。在Spri

    ng Boot的上下文中,表示寻找与自动配置相关的类。

    this.getBeanClassLoader(): 这个方法返回的是当前应用上下文使用的类加载器。类加载器是Jav

    a虚拟机用来查找和加载类的关键组件。在这里,它被用来定位classpath上的资源文件。

    ImportCandidates.load(...): 这个静态方法会根据传入的注解(这里是@EnableAutoConfiguratio

    n)和类加载器来查找并读取相应的AutoConfiguration.imports文件。然后,它会解析该文件中的

    每一行作为全限定类名,并将这些类名收集到一个列表中返回

    String location = String.format("META-INF/spring/%s.imports", annotation.getName());表示的就

    是路径

    打个断点,就能得到name,因此总路径是INF/spring/org.springframework.boot.autoconfigure.

    AutoConfiguration.imports

    9.2 小结

    十 测试


    本文整理自实践经验,如有问题欢迎交流讨论。


    评论