服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 有了Spring为什么还需要SpringBoot呢

有了Spring为什么还需要SpringBoot呢

2023-10-12 16:30会洗碗的CV工程师 Java教程

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

一、Spring缺点分析

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

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

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

有了Spring为什么还需要SpringBoot呢

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

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

有了Spring为什么还需要SpringBoot呢

总结

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中,主要通过引入了父依赖,我们点进去看看父依赖引入了什么

有了Spring为什么还需要SpringBoot呢

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

有了Spring为什么还需要SpringBoot呢

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

有了Spring为什么还需要SpringBoot呢

3.2 自动装配

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

1. 查看注解 @SpringBootApplication 的源码

有了Spring为什么还需要SpringBoot呢

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

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

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

有了Spring为什么还需要SpringBoot呢

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

有了Spring为什么还需要SpringBoot呢

主要就是上面这个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文件有什么?

有了Spring为什么还需要SpringBoot呢

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

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

有了Spring为什么还需要SpringBoot呢

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

有了Spring为什么还需要SpringBoot呢

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

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

有了Spring为什么还需要SpringBoot呢

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

总结

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

到此这篇关于有了Spring为什么还需要SpringBoot呢的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/qq_53317005/article/details/132957942

延伸 · 阅读

精彩推荐
  • Java教程Netty分布式pipeline管道创建方法跟踪解析

    Netty分布式pipeline管道创建方法跟踪解析

    这篇文章主要为大家介绍了Netty分布式pipeline管道创建方法跟踪解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    向南是个万人迷3952022-10-25
  • Java教程用java实现在txt文本中写数据和读数据的方法

    用java实现在txt文本中写数据和读数据的方法

    今天小编就为大家分享一篇用java实现在txt文本中写数据和读数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    征途無境7262021-05-20
  • Java教程java实现301跳转和重定向的方法

    java实现301跳转和重定向的方法

    301跳转和重定向是做项目的时候经常需要用到的,本文给大家分享的是在java中301跳转和重定向的方法,需要的小伙伴参考下吧。 ...

    hebedich7422019-12-12
  • Java教程Java并发编程(CyclicBarrier)实例详解

    Java并发编程(CyclicBarrier)实例详解

    这篇文章主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,如何让各个线程...

    麦田4782020-12-04
  • Java教程Spring成员对象注入的三种方式详解

    Spring成员对象注入的三种方式详解

    这篇文章主要为大家详细介绍了Spring成员对象注入的三种方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希...

    盛世如恋4712022-08-08
  • Java教程seata springcloud整合教程与遇到的坑

    seata springcloud整合教程与遇到的坑

    seata 是alibaba 出的一款分布式事务管理器,他有侵入性小,实现简单等特点。这篇文章主要介绍了seata springcloud整合教程与遇到的坑,需要的朋友可以参考下...

    路过君_P6882021-09-28
  • Java教程Java设计模式之java观察者模式详解

    Java设计模式之java观察者模式详解

    这篇文章主要介绍了Java经典设计模式之观察者模式,简单分析了观察者模式的概念、原理并结合实例形式给出了java观察者模式的具体用法与相关注意事项...

    大忽悠爱忽悠10612022-01-04
  • Java教程myeclipse开发servlet_动力节点Java学院整理

    myeclipse开发servlet_动力节点Java学院整理

    MyEclipse,是在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。下面这篇文章主要给大家...

    fjdingsd2152020-12-07