SpringBoot 学习(一)自动装配

本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。

1.1 pom.xml

(1) 父工程( spring-boot-starter-parent

  • 核心依赖,静态资源过滤等配置。
  • 编写或导入 springboot 依赖时不需要指定版本号,继承父工程版本。

(2) 启动器( spring-boot-starter

  • springboot 的启动场景,功能场景。

  • 添加某功能对应的启动器依赖即可使用此功能。

  • springboot 的依赖前缀

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

1.2 主程序

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

1.2.1 注解( @SpringBootApplication

  • @SpringBootConfiguration :SpringBoot 配置类

  • @EnableAutoConfiguration :自动装配

    • 自动装配流程

      • springboot 启动时从 spring.factories 获取目标类(组件)的全限定名,将其添加到容器。

        在这里插入图片描述

    • 配置仓库

      • spring.factories 中的所有配置类含 @ConditionalOnxxx 注解,只有满足此注解的所有条件,此配置才会生效。

      在这里插入图片描述

  • 结论

    • springboot 的自动配置是在启动时扫描并加载的。
    • 导入对应的启动器( starter ),自动装配就会生效。

1.2.2 main 方法

(1) SpringApplication
  • 判断此应用是普通 Java 项目还是 Web 项目。

  • 查找并加载所有可用的初始化器,设置到 initializers 中。

  • 查找所有应用程序监听器,设置到 listeners 中。

  • 推断并设置 main 方法的定义类,找到主类。

  • 查看类构造器。

    /*** 创建一个新的 SpringApplication 实例,用于加载应用程序上下文,该实例可以在调用 run 方法* 前自定义。* @param resourceLoader 资源加载器* @param primarySources bean 源* @see #run(Class, String[])* @see #setSources(Set)*/
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {this.resourceLoader = resourceLoader;Assert.notNull(primarySources, "PrimarySources must not be null");this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));this.webApplicationType = WebApplicationType.deduceFromClasspath();this.bootstrapRegistryInitializers = getBootstrapRegistryInitializersFromSpringFactories();setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));this.mainApplicationClass = deduceMainApplicationClass();
    }
    
(2) run() 方法
  • 启动应用监听器、获取装配环境参数等。

  • 执行流程

    在这里插入图片描述

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

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

相关文章

MySQL中explain各字段详解及举例

MySQL版本&#xff1a;8.0.33 建表语句&#xff1a; DROP TABLE IF EXISTS actor; CREATE TABLE actor (id int(11) NOT NULL,name varchar(45) DEFAULT NULL,update_time datetime DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;INSERT INTO actor (i…

【Linux】网络原理

文章目录 &#x1f4d6; 前言1. 计算机内部的交流1.1 计算机之间的交流&#xff1a; 2. 协议2.1 网络分层&#xff1a;2.2 以打电话为例&#xff1a;2.3 OSI七层模型&#xff1a;2.4 TCP/IP&#xff1a; 3. 操作系统与网络的关系4. 报头与解包4.1 报头的作用&#xff1a; 5. 局…

从中序遍历和后序遍历构建二叉树

题目描述 106. 从中序与后序遍历序列构造二叉树 中等 1.1K 相关企业 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1…

中国制造让苹果跪服,将再增加一家中国高科技供应商

日前产业链人士指出由于京东方的OLED面板有力地制衡韩国面板厂商三星和LGD&#xff0c;促使他们降价&#xff0c;而且技术也不错&#xff0c;因此正计划再引入一家中国OLED面板厂商&#xff0c;以进一步促进OLED面板的竞争。 早期苹果的OLED面板完全由三星供应&#xff0c;由此…

Go 语言史诗级更新-循环Bug修复

背景 前两天 Golang 的官方博客更新了一篇文章&#xff1a;Fixing For Loops in Go 1.22 看这个标题的就是修复了 Go 循环的 bug&#xff0c;这真的是史诗级的更新&#xff1b;我身边接触到的大部分 Go 开发者都犯过这样的错误&#xff0c;包括我自己&#xff0c;所以前两年我也…

Nginx的反向代理、动静分离、负载均衡

反向代理 反向代理是一种常见的网络技术&#xff0c;它可以将客户端的请求转发到服务器群集中的一个或多个后端服务器上进行处理&#xff0c;并将响应结果返回给客户端。反向代理技术通常用于提高网站的可伸缩性和可用性&#xff0c;并且可以隐藏真实的后端服务器地址。 #user…

笔试强训Day3

学了一坤时Linux&#xff0c;赶紧来俩道题目放松放松。 T1&#xff1a;在字符串中找出连续最长的数字串 链接&#xff1a;在字符串中找出连续最长的数字串__牛客网 输入一个字符串&#xff0c;返回其最长的数字子串&#xff0c;以及其长度。若有多个最长的数字子串&#xff0c…

VSCode『SSH』连接服务器『GUI界面』传输

前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型&#xff08;pygame&#xff09;&#xff0c;但是我是使用 SSH 连接的&#xff0c;不能很好的显示模型训练的效果画面&#xff0c;所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注&#xff1a;我们…

Qt---day4---9.20

qt完成时钟&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QtDebug> #include <QPainter> #include <QTimerEvent> #include <QTime>QT_BEGIN_NAMESPACE names…

Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验

在做项目时&#xff0c;需要根据需要动态添加或新增表单&#xff0c;同时还需要对表单做校验。详情如下图&#xff1a; 刚开始做表单验证的时候&#xff0c;对于这个动态的表单验证有点难搞&#xff0c;试了好几种方法都没有搞定。最后按照下面这种方法实现了&#xff0c;以此…

【数据结构】顺序查找,折半查找,分块查找的知识点总结及相应的代码实现

目录 1、顺序查找 定义及步骤 代码实现 2、折半查找 定义及步骤 代码实现 折半查找判定树 3、分块查找 定义及步骤 1、顺序查找 定义及步骤 顺序查找的定义&#xff1a;从数据集合的起始位置开始&#xff0c;逐一比较每个数据元素&#xff0c;直到找到所要查找…

windows下实现mysql8的主从复制

1、下载mysql8的安装包 MySQL :: Download MySQL Community Server 2、放到指定目录进行解压&#xff0c;更改名称为mysql-8.1.0-winx64-master,并复制一份作为从数据库 3、在bin目录下创建一个my.ini文件 添加如下内容 [mysqld] basedir"D:/soft/mysql/mysql-8.1.0-win…

【精华】关于生成式AI的思考

文章目录 0 论述1 观点2 模型开发栈3 新兴产品蓝图4 思考番外篇-与AI聊天须知 0 论述 生成式AI的首年——“第一幕”——是从技术出发的。我们发现了一个新的“锤子”——基础模型&#xff0c;并引发了一波轻量级的新技术演示应用。 我们现在认为市场正在进入“第二幕”——这…

TS编译选项——TS文件编译后消除注释

在tsconfig.json文件中配置removeComments属性 {"compilerOptions": {// outDir 用于指定编译后文件所在目录"outDir": "./dist", // 将编译后文件放在dis目录下// 是否文件编译后移除注释"removeComments": true} } 左边是编写的t…

华为云云耀云服务器L实例评测 | 基于minikube搭建单节点kubernetes集群

目录 1 安装Docker2 conntrack-tools3 安装minikube4 下载二进制&#xff1a;kubeadm、kubectl、kubelet5 准备镜像6 启动minikube7 简单测试8 开启dashboard ​ Minikube 是一个使用golang开发的单节点kubernetes集群环境&#xff0c;在资源紧张的情况下&#xff0c;可以用于快…

MySQL - 关于约束类型和作用的介绍

约束的概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 约束的作用&#xff1a;用于保证数据库中数据的正确性、完整性和一致性。 约束分类&#xff1a; 约束类型作用关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该…

什么是Peppol ID?如何创建?

Peppol 网络的两大优势是安全和高效&#xff0c;由于Peppol 最常用于电子发票&#xff0c;因此这些优势在电子发票上展露无遗。相比之下&#xff0c;通过电子邮件发送 PDF 格式的发票和其他文件不仅处理成本较高&#xff0c;而且容易出现发票欺诈。 如果您所在的公共部门组织或…

AI聊天ChatGPT系统源码卡密验证开源版

ChatGPT卡密验证版源码是一个基于PHP7.4和MySQL5.6的聊天AI源码&#xff0c;它不仅支持暗黑模式、反应速度极快&#xff0c;而且充值方面采用后台生成卡密方式&#xff0c;方便快捷&#xff0c;如果您有能力将其接入在线支付&#xff0c;即可进一步拓展充值方式&#xff0c;为更…

云原生容器平台——新华资产数字化转型加速器

新华资产管理股份有限公司&#xff08;以下简称“新华资产”&#xff09;于2006年5月经中国保险监督管理委员会批准、7月3日正式挂牌成立&#xff0c;是国内首批专业保险资产管理机构。2020年上半年&#xff0c;公司管理的资产规模突破万亿元人民币&#xff0c;投资收益水平居行…

Python 用列表实现模拟手机通讯录(简易版)

"""列表实现好友管理系统知识点&#xff1a;1、列表存储信息2、列表增删改查3、嵌套循环4、字符串分割和拼接&#xff08;重点&#xff09;5、列表索引"""# 暂存好友信息&#xff08;程序结束数据删除&#xff09; friend_info list()input_buf…