当前位置: 首页 > news >正文

有了Spring为什么还需要SpringBoot呢

目录

一、Spring缺点分析

二、什么是Spring Boot

三、Spring Boot的核心功能

3.1 起步依赖

3.2 自动装配


一、Spring缺点分析

1. 配置文件和依赖太多了!!!

spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。

就比如下面这个图片就反映了进行数据源配置的时候配置文件有多繁琐!!!

除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spring5.0以上只能使用Junit4.12以上的版本。 

下图就很好地诠释了spring框架开发的pom文件添加依赖的恐怖之处:

总结
Spring的缺点:

  • 配置过于繁琐。
  • 引入的依赖过多,版本控制复杂

二、什么是Spring Boot

SpringBoot对Spring的缺点进行改善和优化,基于约定大于配置的思想,简化了Spring的开发,所谓简化是指简化了Spring中大量的配置文件和繁琐的依赖引入。所以SpringBoot是一个服务于框架的框架,它不是对Spring功能的增强,而是提供了一种快速使用Spring框架的方式。

SpringBoot的优点:

  • 配置简单
  • 依赖引入简单
  • 提供了一些大型项目的非功能特性,如嵌入式服务器,安全指标,健康监测等。 

三、Spring Boot的核心功能

Spring Boot的核心功能就是起步依赖和自动装配

3.1 起步依赖

SpringBoot的依赖是基于功能的,而不是普通项目的依赖是基于JAR包的。SpringBoot将完成一个功能所需要的所有坐标打包到一起,并完成了版本适配,我们在使用某功能时只需要引入一个依赖即可。

其原理就是Maven的传递依赖,比如说a依赖b,b依赖c,c依赖d,那么如果我们引入了a依赖,剩下的b,c,d的依赖都会被加载进来。

在Spring Boot中,主要通过引入了父依赖,我们点进去看看父依赖引入了什么

我们可以看到里面继续引入了一个父依赖,我们ctrl再点击看看 

Ok,我们可以看到这里声明了许多了依赖的版本,所以这也是Spring Boot引入依赖时不用声明的版本的原因,在父依赖里面都已经全部定义好了。

3.2 自动装配

     SpringBoot项目自动提供最优配置,同时可以修改默值满足特定的要求。

1. 查看注解 @SpringBootApplication 的源码

@SpringBootConfiguration等同于@Configuration,代表这是一个SpringBoot的配置类,在spring中叫法是Configuration而已。

@Enable Auto Configuration代表开启自动配置功能。

2. 让我们+ctrl点击@Enable Auto Configuration,看看里面有什么

3. 从这里我们只能看出@Import注解导入了AutoConfigurationImportSelector类,现在我们再+ctrl看看AutoConfigurationImportSelector里面写了什么。

主要就是上面这个getCadicateConfigurations方法,里面调用了SpringLoaderFactories.loadFactoryNames方法,从调用改方法返回值是一个configurations集合,就可以猜出该方法主要作用就是获取所有的配置类。并且在后面有加了一句:

No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.

翻译:在META-INF/spring.factories中没有找到自动配置类。如果使用的是自定义打包,请确保该文件是正确的。

也就意味着该方法主要在META-INF/spring.factories中找到需要加载的配置类,读取所有配置类的名称:

让我们查看META-INF/spring.factories文件有什么?

上面配置信息就是存在大量以Configuration结尾的类名称,这里类就是存有自动配置信息的类,在SpringBootApplication获取这些类的名称后再进行加载。

让我们以ServletWebServerFactoryAutoConfiguration类为例分析源码

这里又出现了一个自动加载:@EnableConfigurationProperties({ServerProperties.class}),代表的是自动加载服务器配置类ServerProperties,再让我们ctrl点进去看看

prefix = "server",代表了Spring Boot配置文件的前缀为server,SpringBoot会将以server前缀开始的属性自动映射到该类字段中,就比如我们配置网络端口的时候设置server.port = 8080,

如果我们没有进行配置,则Spring Boot会读取默认配置信息,而默认配置信息就是放在spring-configuration-metadata.json文件中,如下图:

该文件也是存放所有的默认配置信息!!!

总结

通过起步依赖和自动装配使得进行开发时省去了很多麻烦,不用进行版本的管理,以及进行各种配置,这里在SpringBoot中全部通过自动装配一步到位。

http://www.lryc.cn/news/172480.html

相关文章:

  • 【记录】Python 之于 C/C++ 区别
  • 【Vue-Element-Admin】dialog关闭回调事件
  • Ansible自动化:简化你的运维任务
  • webpack配置alias后eslint和ts无法识别
  • 小程序从无到有教学教程-- 01.重置华为云服务器Huawei Cloud EulerOS 2.0版本并且设置安全组
  • js实现短信验证码一键登录
  • vue2的基础知识巩固
  • echart离线地图下载地址
  • elk日志某个时间节点突然搜索不到了
  • dbeaver 导出的sql文件,恢复数据库报错,Unknown command ‘\‘‘.
  • Android.bp常用语法和预定义属性
  • close和fclose
  • 在已知的二维坐标里找到最接近的点
  • spring boot 八、 sharding-jdbc 分库分表 按月分表
  • Java 8 中Stream流的一些用法
  • Elasticsearch 8.10 中引入查询规则 - query rules
  • Windows PostgreSql 创建多个数据库目录
  • Java AOP Framework概述
  • 220V转12V芯片-交流45v-265v输入,固定12v输出峰值电流600MA
  • TOGAF架构开发方法—初步阶段
  • 软件定制APP开发步骤分析|小程序
  • postman接口传参案例
  • 【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)
  • CFCA企业版通配符SSL证书
  • 基于ASCON的AEAD
  • 汇编宏伪指令介绍
  • 优化系统报错提示信息,提高人机交互(一)
  • FPGA纯verilog实现8路视频拼接显示,提供工程源码和技术支持
  • spring boot项目一次性能测试的总结
  • 10分钟设置免费海外远程桌面