一、Spring Boot 核心概述

Spring Boot 是简化 Spring 应用开发的框架,作为 Spring 技术栈的整合方案和 J2EE 开发的一站式解决方案,其核心优势体现在:

  • 快速创建独立运行的 Spring 项目,轻松集成主流框架
  • 内置 Servlet 容器(如 Tomcat),无需打包为 war 包即可部署
  • 提供 starters 机制,实现自动依赖管理与版本控制,减少版本冲突问题
  • 大量自动装配功能简化开发流程,同时支持自定义默认配置
  • 零 XML 配置、无代码生成,真正实现开箱即用
  • 内置准生产环境的运行时监控功能,便于项目运维
  • 与云计算天然适配,满足现代部署需求

二、微服务架构详解

1. 微服务的定义与演进

2014 年,Martin Fowler 提出微服务架构理念(参考文档:Microservices Guide)。从技术演进路径看,架构风格经历了:Servlet → SSH → SSM → 单体应用 → SOA → Spring Cloud 的发展过程。

微服务的核心定义为:一种将应用拆分为多个小型、独立业务服务的架构风格。每个服务具备独立处理逻辑和轻量通讯机制,可部署在单个或多个服务器上,是松耦合、具有有界上下文的面向服务架构。

  • 单体应用:所有功能模块集中在一个应用中(ALL IN ONE)
  • 微服务:每个功能元素都是可独立替换和升级的软件单元,通过 HTTP 等协议实现服务间通信

2. 微服务的优缺点

优势缺点
聚焦单一业务功能,服务体积小巧分布式系统操作复杂,运维成本高
支持 2-5 人小团队独立开发可能存在重复开发工作
松耦合设计,开发与部署独立问题跟踪困难,排查成本高
支持多语言开发服务数量增加后,管理复杂度指数上升
易于集成自动化部署和持续集成-
便于理解、修改和维护-
可按需扩展,资源利用更高效-
支持中低端服务器部署-
易于与第三方系统集成-
数据存储灵活(独立数据库或统一数据库)-

三、Spring Boot 开发环境准备

1. 环境约束

  • JDK:1.8 及以上(推荐 1.8.0_112 版本)
  • Maven:3.x 版本(推荐 3.3 以上)
  • 开发工具:IntelliJ IDEA 2017+ 或 STS
  • Spring Boot 版本:本文以 2.0.2.RELEASE 为例(基于 Spring 5)

2. Maven 配置

在 Maven 的 settings.xml 配置文件的 profiles 标签中添加:

<profile><id>jdk‐1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

3 idea  设置

 

四、Spring Boot 入门实战(Hello World)

1. 实现步骤

  1. 创建 Maven 工程(选择 jar 类型)
  2. 导入依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
  1. 编写主程序类
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldMainApplication.class, args);}
}
  1. 编写 Controller
@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello() {return "Hello World!";}
}
  1. 运行测试:执行主程序的 main 方法,访问 http://localhost:8080/hello
  2. 简化部署:添加打包插件后,使用 mvn package 打包,通过 java -jar 命令运行
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

2. 核心原理探究

(1)POM 文件分析
  • 父项目spring-boot-starter-parent 的父项目是 spring-boot-dependencies,它是版本仲裁中心,管理所有依赖版本,因此导入依赖时通常无需指定版本。
  • 启动器(Starter)spring-boot-starter-web 是 Web 场景启动器,自动导入 Web 开发所需的组件(如 Spring MVC、Tomcat 等)。Spring Boot 将不同功能场景封装为 starters,开发者只需导入对应 starter 即可快速集成功能。
(2)主程序类注解分析

@SpringBootApplication 是核心注解,由以下注解组成:

/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}

@SpringBootConfiguration:标识为 Spring Boot 配置类,内部包含 @Configuration 注解,说明配置类也是容器组件(@Component)。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

@EnableAutoConfiguration:开启自动配置,包含:

@AutoConfigurationPackage:通过 @Import 导入 AutoConfigurationPackages.Registrar,将主配置类所在包及子包下的组件扫描到 Spring 容器。以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage:自动配置包

@Import(EnableAutoConfigurationImportSelector.class):从 META-INF/spring.factories 中加载自动配置类(xxxAutoConfiguration),自动配置场景所需组件,替代手动配置。Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import(EnableAutoConfigurationImportSelector.class)

给容器中导入组件?EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,

并配置好这些组件;

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)

Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;

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

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

相关文章

轻松上手:从零开始启动第一个 Solana 测试节点

嗨&#xff0c;各位技术爱好者们&#xff01; 大家是否对 Solana 的“光速”交易处理能力感到好奇&#xff1f;或者你是一名开发者&#xff0c;正准备在 Solana 上构建下一个杀手级 dApp&#xff1f;无论大家是出于学习目的还是实际开发需求&#xff0c;亲手运行一个 Solana 节…

Gerrit workflow

提交代码 每次提交代码前&#xff0c;先执行 git pull --rebase &#xff0c;确保已经合并天上代码&#xff0c;解决冲突 git add git commit -m git push origin HEAD:refs/for/{BRANCH_NAME} 可考虑设置 alias 方式&#xff0c;参考下文 CR-2 情况处理(verify-1情况一样处理…

量化交易如何查询CFD指数实时行情

CFD即所谓的差价合约&#xff0c;是投资者在不拥有实际资产的情况下&#xff0c;交易金融市场的一种方式。最近笔者研究这一块比较多&#xff0c;但查遍整个中文互联网却很少找到关于CFD实时行情的查询教程。因此有了这篇文章。以下我将通过一个简单的Python代码示例&#xff0…

sql练习二

首先&#xff0c;建表。创建学生表和score表接着导入创建好基础信息就可以开始做了。3、分别查询student表和score表的所有记录4、查询student表的第2条到第5条记录5、从student表中查询计算机系和英语系的学生的信息6、从student表中查询年龄小于22岁的学生信息7、从student表…

windows11下基于docker单机部署ceph集群

windows下基于docker单机部署ceph集群 创建ceph专用网络 docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network查看是否创建成功&#xff08;查看创建状态&#xff09; docker network inspect ceph-network拉取镜像&#xff1a;(镜像源自行选择) docke…

使用DataGrip连接安装在Linux上的Redis

目录 一、前言 二、开放防火墙端口 三、使用DataGrip连接安装在Linux上的Redis 一、前言 在学习黑马Redis从入门到实战的视频&#xff0c;完成了Redis在linux上的安装配置之后&#xff0c;我们可以使用图形化界面方便操作使用redis数据库。在24年JavaWebAI学习时连接MySQL数…

MySQL的union、union all导致排序失效

今天练习SQL&#xff0c;使用union all 连接各个查询导致我的各个查询排序失效&#xff0c;最后发现使用union all后会忽略各个模块的order by&#xff0c;只有最外层的order by才会生效原SQL如下&#xff1a;( selectexam_id tid,count(distinct uid) uv, count(uid) pv frome…

LVS 集群技术实践:NAT 与 DR 模式的配置与对比

1 实验环境规划 实验目标是搭建一个负载均衡集群&#xff0c;通过 LVS 调度器将流量分发到两台真实服务器&#xff08;RS1 和 RS2&#xff09;。2.网络配置3 实验步骤关闭防火墙和 SELinux安装 HTTP 服务&#xff08;在 RS21和 RS2 上&#xff09;&#xff1a;sudo systemctl s…

YOLOv8中添加SENet注意力机制

注意力机制(Attention Mechanism)是深度学习中的一种方法,在图像处理领域,尤其是在卷积神经网络(CNN)和视觉Transformer等架构中。图像数据具有局部相关性,注意力机制可以帮助模型聚焦于图像中更重要的区域,从而提升处理效果。 SENet(Squeeze-and-Excitation Network)…

SpringBoot五分钟快速入门指南

使用 Spring Boot 构建应用 本指南提供了关于Spring Boot如何帮助您加速应用开发的一些示例。随着您阅读更多 Spring 入门指南,您将看到 Spring Boot 的更多用例。本指南旨在让您快速了解 Spring Boot。如果您想创建自己的基于 Spring Boot 的项目,请访问 Spring Initializr…

docker,防火墙关闭后,未重启docker,导致端口映射失败

首先&#xff0c;看这篇文章前&#xff0c;建议先把网上其他的文章说的方法尝试一遍&#xff01;&#xff01;&#xff01; 1. 现象 docker启动某一个容器&#xff0c;然后映射端口时显示失败2. 解决 把网上的方法尝试一遍之后&#xff0c;最后发现是防火墙的问题&#xff01;&…

事务处理与AOP(web后端笔记第四期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录事务spring事物管理事物属性--回滚事物属性--传播行为(propagation)AOP一些核心概念通知类型通知的执行顺序切入点表达式executionannotation连接点事务 事物是一组操作的集合&…

第36周———— RNN实现阿尔茨海默病诊断

目录 前言 1.检查GPU 2.查看数据 3.划分数据集 4.创建模型与编译训练 ​​​​5.编译及训练模型 6.结果可视化 7.模型预测 8.总结&#xff1a; 前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查G…

equals和hashcode方法重写

在 Java 中&#xff0c;当你需要基于对象的内容而非引用地址来判断两个对象是否相等时&#xff0c;就需要重写equals和hashCode方法。以下是具体场景和实现原则&#xff1a;一、为什么需要同时重写这两个方法&#xff1f;equals方法&#xff1a;默认比较对象的内存地址&#xf…

Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql

Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql一、情境描述在Excel中有标准的格式化数据&#xff0c;如何快速导入到数据库中呢&#xff1f;有些工具支持Excel导入的&#xff0c;则可以快速导入数据---例如Navicat&#xff1b;如果不支持呢&#xff0c;如果将Excel表…

金和OA C6 DelTemp.aspx 存在XML实体注入漏洞(CVE-2025-7523)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。 前言:我们建立了一个更多,更全的知识库。每日追踪最新的安全漏洞,追中25HW情报。 更多详情: http…

Android性能优化之启动优化

一、启动性能瓶颈深度分析 1. 冷启动阶段耗时分布阶段耗时占比关键阻塞点进程创建15%fork进程 加载ZygoteApplication初始化40%ContentProvider/库初始化Activity创建30%布局inflate 视图渲染首帧绘制15%VSync信号等待 GPU渲染2. 高频性能问题 初始化风暴&#xff1a;多个库…

中国优秀开源软件及企业调研报告

中国优秀开源软件及企业调研报告 引言 当前中国开源生态呈现蓬勃发展态势&#xff0c;技术创新领域尤为活跃&#xff0c;其中人工智能大模型成为开源动作的核心聚焦方向。2025年上半年&#xff0c;国内AI领域开源生态迎来密集爆发&#xff0c;头部科技企业相继推出重要开源举…

C++语法 匿名对象 与 命名对象 的详细区分

目录一、匿名对象的本质定义二、匿名对象的调用逻辑&#xff1a;即生即用的设计三、与命名对象的核心差异四、匿名对象的典型应用场景五、匿名对象的潜在风险与规避六、总结&#xff1a;匿名对象的价值定位在 C 类与对象的知识体系中&#xff0c;匿名对象是一种容易被咱们忽略&…

【Fedora 42】Linux内核升级后,鼠标滚轮失灵,libinput的锅?

解决&#xff1a; 最近在玩Fedora 42&#xff0c;升级了一次给俺鼠标滚轮干失灵了。原因可能是 libinput 升级后与Fedora升级后的某些配置有冲突&#xff1f;&#xff08;搞不懂&#xff09; sudo dnf downgrade libinput降级 libinput (1.28.901-1.fc42 -> 1.28.0-1.fc42) …