关于SpringBoot你需要了解这些

文章目录

      • 写在前面
        • 官网上是这么去描述springboot以及总结springboot特点的
        • springBoot特点
      • spring核心流程简图
      • Springboot常用注解
      • springBoot自动装配原理
      • 手写如何自定义starter
      • SpringBoot是如何启动tomcat的

写在前面

springBoot官网

官网上是这么去描述springboot以及总结springboot特点的

Spring Boot makes it easy to create stand-alone, production-grade
Spring based Applications that you can “just run”.

We take an opinionated view of the Spring platform and third-party
libraries so you can get started with minimum fuss. Most Spring Boot
applications need minimal Spring configuration.

springBoot可以轻松的创建一个独立的,生产级别的,基于spring应用的,你可以立即运行的程序。

对于这句话的理解对于ssm的老开发,感受会非常深,因为需要配置一系列bean,比如,使用springmvc,我们需要配置dispatcherServlet,handlermapping,hadlerAdapter,viewResolver。使用到数据库,需要配置dataSource,JdbcTemplate,使用mybatis,需要配置SqlSessionFactoryBean会话工厂。。
我们对Spring平台和第三方库持有一种有立场的观点,这样您就可以尽可能轻松地开始。大多数Spring Boot应用程序只需要最少的Spring配置。

springBoot特点
  1. 创建一个独立的spring应用
  2. 直接内嵌了tomcat,jetty or Undertow (不需要不是war)
  3. 提供约定好的starter依赖项,去简化构建配置
  4. 尽可能自动配置spring及第三方依赖包
  5. 提供生产就绪的功能,例如指标、运行状况检查和外部化配置
  6. 完全不需要生成代码,也不需要 XML 配置

spring核心流程简图

流程简图

  1. SpringBoot通过**@EnableAutoConfiguration注解开启自动配置**,加载spring.factories中注册的各种AutoConfiguration类
  2. 当某个AutoConfiguration类满足其注解@Conditional指定的生效条件时,实例化该AutoConfiguration类中定义的Bean(组件等),并注入Spring容器/Springboot容器里,就可以完成依赖框架的自动配置。

Springboot常用注解

@SpringBootApplication 启动类上的注解,他是一个复合注解,下面主要介绍三个注解

  • @SpringBootConfiguration
    • 这个注解实际就是一个@Configuration,表示启动类也是一个配置类
  • @ComponentScan
    • 表示扫描路径,因为默认是没有配置实际扫描路径的,所以SpringBoot扫描的路径是启动类所在的包以及子包
  • @EnableAutoConfiguration
    • @EnableAutoConfiguration的关键功能是通过**@Import注解导入的AutoConfigurationImportSelector** 来完成从spring.factories 中加载配置类。

springBoot自动装配原理

  • 通过**@EnableAutoConfiguration** 的 @Import注解导入的AutoConfigurationImportSelector 扫描所有包的META-INF目录下的来完成从spring.factories 中加载配置类到一个String数组中。
  • 交给Spring, Spring会将它们封装成BeanDefinition,放到BeanDefinitionMap中去,最后Spring就能管理到这些Bean

手写如何自定义starter

创建配置类,@Configuration配置类,还可以添加一些@ConditionOnXXX的注解控制配置的生效条件,结合XXXProperties 获取配置信息 等。

@Configuration
@EnableConfigurationProperties(UserProperties.class)
@ConditionalOnClass(ChinService.class)
public class LisAutoConfiguration {@Autowiredpublic UserProperties userProperties;@Bean@ConditionalOnMissingBean(name = "chinService")public ChinService chinService(){return new ChinService(userProperties);}
}

spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.hbwxz.learnspringboot.autoConfigure.LisAutoConfiguration

创建UserProperties读取配置文件

package com.hbwxz.learnspringboot.config;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "ls")
public class UserProperties {private  String username;private Integer age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

创建服务类,也就是我们真正应用需要注入的bean

package com.hbwxz.learnspringboot.service;import com.hbwxz.learnspringboot.config.UserProperties;public class ChinService {private UserProperties userProperties;public ChinService(UserProperties userProperties) {this.userProperties = userProperties;}public void getUserProperties() {System.out.println(userProperties.getAge());}public UserProperties getUser() {return this.userProperties;}}

在另一个项目中引用这个starter依赖并测试

配置文件

ls:username: akaage: 10

测试类


@SpringBootTest
@RunWith(SpringRunner.class)
public class testStarter {@AutowiredChinService chinService;@Testpublic void test1(){chinService.getUserProperties();}
}

控制台

2024-03-26 17:17:27.703  INFO 24256 --- [           main] com.test.starter.testStarter             : Starting testStarter using Java 1.8.0_221 on DESKTOP-C8H6MAH with PID 24256 (started by admin in D:\code\springboot\testStarter)
2024-03-26 17:17:27.704  INFO 24256 --- [           main] com.test.starter.testStarter             : No active profile set, falling back to 1 default profile: "default"
2024-03-26 17:17:28.936  INFO 24256 --- [           main] com.test.starter.testStarter             : Started testStarter in 1.566 seconds (JVM running for 2.313)
10

SpringBoot是如何启动tomcat的

  • ⾸先SpringBoot在启动时会先创建⼀个Spring容器
  • 再创建容器的onRefresh方法中会创建webServer
  • 通过new Tomcat对象,绑定端口及协议,然后去启动tomcat服务器

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组的概述

数组的概述 为什么需要数组 需求分析1: 需要统计某公司50个员工的工资情况,例如计算平均工资、找到最高工资等。用之前知识,首先需要声明50个变量来分别记录每位员工的工资,这样会很麻烦。因此我们可以将所有的数据全部存储到一…

网际协议 - IP

文章目录 目录 文章目录 前言 1 . 网际协议IP 1.1 网络层和数据链路层的关系 2. IP基础知识 2.1 什么是IP地址? 2.2 路由控制 3. IP地址基础知识 3.1 IP地址定义 3.2 IP地址组成 3.3 IP地址分类 3.4 子网掩码 IP地址分类导致浪费? 子网与子网掩码 3.5 CIDR与…

一口气搞懂分库分表 12 种分片算法,大厂都在用

大家好,我是小富~ 前言 本文是《ShardingSphere5.x分库分表原理与实战》系列的第五篇文章,我们一起梳理下ShardingSphere框架中的核心部分分片策略和分片算法,其内部针为我们提供了多种分片策略和分片算法,来应对不同…

开发组合:PHP+MySQL 同城社区小程序源码 同城便民信息发布系统源码 源码开源可二开含搭建教程

同城便民信息发布系统源码在提升信息发布效率、促进商家宣传、增强用户互动、实现信息聚合与分类管理、个性化定制与扩展以及数据统计与分析等方面发挥着重要作用。 今天小编给大家分享一个同城社区小程序源码、同城便民信息发布系统源码,开发组合PHPMySQL&#xf…

中间商赚差价?炒金该不该选伦敦金投资代理商?

近期,伦敦金价格受鲍威尔鸽派言论的影响,一度强势冲高突破2200大关,这不光是金价再度刷新历史的新高,而且也是金价首次突破2200。有这么好的涨势,自然很多投资者都想入场去炒伦敦金,但是他们入场的时候会面…

软件推荐 篇三十七:安卓软件推荐IP Tools「IP工具」:全面解析网络状态与管理的必备神器

引言: 随着互联网的普及,网络已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都需要通过网络来进行各种操作。然而,网络问题的出现往往会给我们带来诸多困扰。为了更好地管理和优化网络,我们…

SerpAPI - Search API

文章目录 关于 SerpAPIserpapi & google-search-resultshttp 请求示例: Python 调用示例Basic Examples in PythonSearch BingSearch BaiduSearch YahooSearch YouTubeSearch WalmartSearch eBaySearch NaverSearch Home DepotSearch Apple App StoreSearch Duc…

【中文视觉语言模型+本地部署 】23.08 阿里Qwen-VL:能对图片理解、定位物体、读取文字的视觉语言模型 (推理最低12G显存+)

项目主页:https://github.com/QwenLM/Qwen-VL 通义前问网页在线使用——(文本问答,图片理解,文档解析):https://tongyi.aliyun.com/qianwen/ 论文v3. : 一个全能的视觉语言模型 23.10 Qwen-VL: A Versatile…

[Java基础揉碎]抽象类

目录 通过问题引出 介绍 关键点 细节 ​编辑 抽象类的最佳设计模式--模版设计模式 1.先用最容易想到的方法 2.分析问题,提出使用模板设计模式 通过问题引出 假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道…

创建AI智能体

前言 灵境矩阵是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类型的开发方式,打造大模型时代的产品能力。开发者可以通过 prompt 编排的方式低成本开发智能体&am…

成都爱尔胡建斌院长强调黄斑病变是眼睛哪儿出了问题

黄斑位于眼球内部的眼底的视网膜区域,处于人眼的光学中心区,是视力轴线的投影点。它是人眼视网膜中央视觉细胞最集中的部位。黄斑中心多为锥形细胞,对明暗不敏感,对色敏感。黄斑外围多为柱形细胞,对明暗敏感,对色几乎不…

时序数据预处理

时序数据预处理 对于数据科学来说,凡事“预”则立,不“预”则废。数据的质量直接决定数据挖掘的结果。本文旨在一站式的梳理时序数据的预处理步骤。 数据预处理的目的是将脏数据变成我们想要的干净的数据,这里的干净指的是: 准确…