SpringBoot原理初探以及第一个SpringBoot程序【SpringBoot】

news2025/1/15 21:08:13

文章目录

  • 一.SpringBoot
    • 1.1 Spring和SpringBoot
    • 1.2 本阶段学习任务
    • 1.3 微服务架构
  • 二.搭建一个SpringBoot程序
    • 2.1 新建SpringBoot项目(官方)
    • 2.2 正常创建SpringBoot项目
    • 2.3 项目结构
    • 2.4 启动项目
    • 2.5 写一个接口HelloControlier
    • 2.6 原理
    • 2.7 更改配置
  • 三.原理初探

一.SpringBoot

1.1 Spring和SpringBoot

Spring:Spring是一个开源框架, 2003年兴起的一个轻量级的Java开发框架, 作者:Rod Johnson Spring是为了解决企业级应用开发的复杂性而创建的, 简化开发。

Spring Boot

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

SpringBoot最核心的东西:自动装配。

1.2 本阶段学习任务

image-20221115235031596

1.3 微服务架构

微服务就是一些协同工作小而自治的服务。

与传统的单一软件架构不同,微服务架构是为满足当前互联网后台服务的“高并发、高性能、高可用性三高要求”而创建的软件架构。

image-20221116000354056

image-20221116000632757

二.搭建一个SpringBoot程序

环境:

jdk 1.8

maven 3.6.1

SpringBoot :最新版

idea

SpringBoot官方网站:

https://spring.io/projects/spring-boot#overview

2.1 新建SpringBoot项目(官方)

1.在官方网站里点击进入Spring Initializr.

image-20221116001431339

2.project选择Maven,语言选择java

版本选择最新的2.7.5,Java选择8,在右边将Springweb添加进去,点击下载,就会得到一个标准的Maven项目。

image-20221116001659902

3.使用idea打开这个项目即可:

image-20221116002138978

2.2 正常创建SpringBoot项目

1.直接在idea里创建一个Spring项目即可,如下配置

image-20221116002452001

2.添加依赖Spring Web

image-20221116002521867

总结:俩种创建方式1.在SpringBoot官网下载后,导入idea开发。2.可以直接在idea里创建项目进行开发。

2.3 项目结构

SpringbootDemoApplication为项目的主入口。

application.properties是项目的核心配置文件。

image-20221116003647684

2.4 启动项目

运行主入口:就会启动项目

public class SpringbootDemoApplication {

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

}

image-20221116003929782

访问本地8080端口:

image-20221116003949151

说明项目搭建成功。

2.5 写一个接口HelloControlier

这个接口,接口就是hello。调用业务,接受前端的参数

@RestController
public class HelloControlier {
    @RequestMapping("/hello")
    public String hello(){
        return "hello,world上进小菜猪";
    }
}

所以我们访问http://localhost:8080/hello,就会进入这个接口。

返回如下:

image-20221116004737068

原理:自动装配!

2.6 原理

依赖:这里配置web依赖,比如tomact,dispatcherServlet,xml等等:

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

单元测试:

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

打jar包依赖:

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

2.7 更改配置

到application.properties里,写端口号:

server.port=8081

重新启动项目:发现现在的端口号变成了8081!

image-20221116005834717

三.原理初探

自动配置原理

在文件里的pom.xml里:

1.核心依赖都在父工程里。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

2.启动器

就是一个Springboot的启动场景,像下面的spring-boot-starter-web,会帮我们自动的导入web环境的所有依赖。

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

3.项目入口文件SpringbootDemoApplication

SpringApplication类

run方法

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

SpringApplication

这个类做了下面4个事情:

1.推断应用的类型是普通的项目还是Web项目

2.查找并加载所有可用初始化器,设置到initializers属性中中

3.找出所有的应用程序监听器,设置到listeners属性中

4.推断并设置main方法的定义类,找到运行的主类

@SpringBootApplication标注这个类是一个springboot的应用

点进去查看源码:

@SpringBootConfiguration:springboot的配置

  • @Configuration :spring 配置类
    • @Component:也是一个组件类

@EnableAutoConfiguration:自动配置

  • @AutoConfigurationPackage:自动配置包
    • @Import({AutoConfigurationPackages.Registrar.class}):自动配置“包注册”
    • @Import({AutoConfigurationImportSelector.class})自动配置导入选择

获取所有的配置:

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

获取候选的配置:核心代码

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
    ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
    Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
    return configurations;
}

对于SpringBoot的理解,俩点:

1.自动装配

2.run()方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Plaxis Python 命令流自动化处理、岩土工程渗流问题之有限单元法

目录 岩土工程渗流问题之有限单元法&#xff1a;理论、模块化编程实现、开源程序手把手实操应用 基于python命令流及代码的Plaxis自动化建模与典型案例实践应用 岩土工程渗流问题之有限单元法&#xff1a;理论、模块化编程实现、开源程序手把手实操应用 有限单元法在岩土工程…

NC65 sql server 报数据库“xxx”事务日志已满 的解决方案。

近日公司的NC系统在做薪资发放的计算是&#xff0c;报了如下图的错误&#xff1a; 如何解决解决事务日志已满的问题&#xff08;SQL Server 错误 9002&#xff09;这个问题呢&#xff1f; 微软给的方案 适用于&#xff1a; SQL Server&#xff08;所有受支持的版本&#xf…

IPWorks Encrypt Delphi强加密的一整套组件

IPWorks Encrypt Delphi强加密的一整套组件 通过主要加密标准实现强加密的一整套组件。 IPWorks Encrypt是一个广泛的组件库&#xff0c;允许您通过主要的加密标准(包括S/MIME、OpenPGP、TripleDES、TwoFish、RSA、AES等)对文件、电子邮件、文档和消息进行加密和解密。 IPWorks…

整理了173家国企清单,跳槽必备!

我这里汇总了一些计算机专业可以加入的国企&#xff0c;分享给求职的小伙伴们&#xff0c;内容很多&#xff0c;先收藏再看&#xff01; 一、首选证券公司 各省基本都有一所证券公司&#xff0c;沿海省份集中在税前30-40万左右&#xff0c;内地集中在20-30万。很少加班&#…

二、使用java简单操作kafka

系列文章目录 1.kafka基本原理 文章目录系列文章目录一、搭建一个kafka的demo2.引入依赖3.创建对应的类二、生产者2-1发送到指定分区&#xff0c;等待消息发送成功&#xff08;会阻塞&#xff09;2-2发送到指定分区&#xff0c;异步方式2-3其余两种情况&#xff0c;不指定分区…

如何在 Ubuntu 22.04 上安装 最新版本Wine

过渡到 Linux 的用户的担忧之一是他们是否可以在 Linux 上运行自己喜欢的应用程序。这些范围可以从 Windows 游戏和简单的应用程序软件。值得庆幸的是&#xff0c;Wine 允许用户在 Linux/Unix 系统上运行和执行 Windows 程序。 Wine &#xff08;“Wine Is Not an Emulator” …

【MySQL | 运维篇】06、MySQL 分库分表之 MyCat 分片规则

目录 一、范围分片 1. 介绍 2. 配置 schema.xml逻辑表配置&#xff1a; schema.xml数据节点配置&#xff1a; rule.xml分片规则配置&#xff1a; 二、取模分片 1. 介绍 2. 配置 schema.xml逻辑表配置&#xff1a; schema.xml数据节点配置&#xff1a; rule.xml分片规…

微信小程序--自定义组件(超详细 从新建到使用)

微信小程序–自定义组件 微信小程序官网介绍&#xff01; 本文提供给急需使用自定义组件人群&#xff0c;以下是博主个人理解和案例&#xff01;可以辅助官网来看 介绍&#xff1a; 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关…

第6章 数据库事务 第7章 DAO及相关实现类

第6章 数据库事务 1.数据库事务介绍 *事务&#xff1a;一组逻辑操作单元&#xff0c;使数据从一种状态变换到另一种状态 *事务处理&#xff1a;保证所有事务都作为一个工作单元来执行 2.JDBC事务处理 *数据一旦提交则不可回滚 *导致数据自动提交的操作&#xff1a;DDL操…

UE4 回合游戏项目 17- 进入指定区域触发战斗事件

在上一节&#xff08;UE4 回合游戏项目 16- 控制玩家&#xff09;基础上&#xff0c;增加角色走进指定区域从而触发战斗场景的功能 主要思想是添加一个碰撞区域&#xff0c;当玩家与该区域碰撞时&#xff0c;触发战斗事件 效果&#xff1a; 步骤&#xff1a; 1.新建蓝图类 选…

循环检测算法(哈希,双指针)

文章目录快乐数环形链表环形链表II快乐数 寻找快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环…

简明 Python 教程

文章目录参考书籍1、安装和输出2、注释3、常量和变量4、格式化方法5、案例&#xff1a;使用变量与字面常量6、运算符7、数值运算与赋值的快捷方式8、计算命令9、if 语句10、while 语句11、for 循环12、break 语句13、continue 语句14、函数15、函数参数16、局部变量17、**globa…

记一次G1垃圾回收线上调优的实践

背景 有个项目最近上线了&#xff0c;为了避免后面访问量突增引发不可预知的问题&#xff0c;按照惯例需要进行压测。我选取了几个请求比较频繁的接口进混合压测&#xff0c;发现了一个性能瓶颈&#xff0c;是垃圾回收配置不合理导致的。 我使用的是G1垃圾回收策略。 正文 …

log4j日志漏洞问题

去年&#xff0c;log4j被爆出了一个漏洞&#xff0c;说可以通过利用日志格式化中的远程注入控制主机。当时&#xff0c;这个漏洞被形容为史诗级漏洞&#xff0c;因为这个远程操作可以执行一些操作&#xff0c;如果这个操作有恶意&#xff0c;那么就可以干任何事情&#xff0c;其…

jsonp介绍

为什么要知道jsonp&#xff0c;jsonp的作用是什么&#xff1a; Jsonp(JSON with Padding) 是 json 的一种"使用模式"&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;获取资料&#xff0c;即跨域读取数据。原则上浏览器是不允许请求不同域名的数据的&…

知识付费小程序的作用_知识付费小程序有哪些功能

在线知识付费产业的主要业务逻辑是基于用户的主动学习需求&#xff0c;为其提供以跨领域基础知识与技能为核心的在线知识服务&#xff0c;提升其达到求知目的的效率。公众号和小程序的迅速发展&#xff0c;又为知识付费提供了技术支持&#xff0c;从而促进了行业的进一步发展。…

skywalking部署

一.到apache 上下载 skywalking的git上下载包&#xff0c;选择对应的版本 Downloads | Apache SkyWalking 二.选择完后会跳转到对应的apache下载地址&#xff0c;点击下载 Apache Downloads 三.将下载好的压缩包进行解压&#xff0c;我下载的是8.8.1版本 tar -xf apache-sky…

C++11初篇(快速了解)

文章目录1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list3. 声明3.1 auto3.2 decltype3.3 nullptr4 范围for循环1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C1…

爱婴室主要股东再现减持:莫锐伟、王云亦是如此,业绩表现不理想

一波刚平&#xff0c;一波又起。 11月15日&#xff0c;爱婴室&#xff08;SH:603214&#xff09;发布《关于持股5%以上股东减持股份计划公告》&#xff0c;称该公司持股16.09%的股东合众投资拟通过集中竞价、及/或大宗交易方式减持持有的公司股份不超过843.1015万股&#xff0…

基于Java+JSP+MySQL基于SSM的物流公司物流订单管理系统-计算机毕业设计

项目介绍 随着我国经济的高速增长&#xff0c;物流快递的数量也在不断的增加&#xff0c;同时面临的就是如何更加方便快捷和高效的管理物流订单的问题&#xff0c;传统模式的物流订单管理模式明显已经不能够满足当下的需求&#xff0c;于是我们提出了基于B/S的贴心物流公司物流…