Spring框架与SpringBoot的关联与区别(1)

简介: Spring框架与SpringBoot的关联与区别

前言

Spring是我们作为java开发最常用的框架了,但现如今,大部分项目实际使用的却是SpringBoot。由于它们存在一些关联,导致很多开发对其功能和目的有些混乱,例如说不清一些功能到底是Spring框架的,还是SpringBoot带的?又或者不能清晰的描述两个框架的各自功能和目的,今天,我们就来详细解释这些问题


一、从pom看关联

我们既然想知道两个框架的关联,不如直接开个工程,引入一个基础的Springboot启动器,然后通过依赖关系来分辨两者的联系


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.3.12.RELEASE</version>
 </dependency>

4d38b7d3b72447989cd4f478153c93ca.png

我们先看三个带标注的包,springBoot启动器是不含代码的,它的唯一作用就是引入各个指定了版本的包,其中最重要的就是spring-boot 和 spring-boot-autoconfigure 两个springboot核心包


而我们要看spring框架 和 springBoot 框架的关系,可以直接看两段红色的依赖性,图中,spring-boot-autoconfigure自动配置包不需要再引用任何东西,而作为核心支持的spring-boot包则需要引入spring框架核心包spring-context 和 spring-core


总结来看,如果我们只关注核心包,springboot框架毫无疑问是建立在spring框架之上的,在spring框架之上,加上一些类比如SpringApplication启动器等,并且配合上自动配置功能


二、spring的目的与不足

1. java EE

在Spring框架创建前,Java EE平台(即Java Enterprise Edition)是企业级应用程序开发的主要框架,该框架的提出主要是因为一个企业级应用的搭建涉及的内容太多,迫切需要一个规范来进行模块分层处理,于是sun公司(现在已经被Oracle收购)希望一些基础的共性的东西由容器去管理,而个性化的东西,如业务由组件去管理,由容器+组件的方式来提供服务。


所以这两方面:容器和组件。容器由各个开发商去根据规范开发,如WebSphere、WebLogic Server等。开发者则去开发组件,然后运行在容器中。由于容器满足了统一的规范,所以组件可以运行在不同的容器上

a45911afae77455f97caa6ce9929a0d9.png


但 它太复杂了。在构建现代企业级应用程序时,开发人员往往需要大量的样板代码和配置,比如在web.xml文件中手动配置Servlet和JSP的映射关系,手动配置数据库连接池和JNDI数据源,手动配置EJB容器的属性以及部署EJB组件等,这些配置内容繁琐,容易出错,并且需要开发人员掌握很多细节,同时这些配置还需要在不同的JavaEE容器之间进行调整。


2. spring的目的

上面我们介绍了java EE的开发与配置过于繁杂,所以Rod Johnson于2002年创建了Spring框架,我们必须明白,spring并不是推翻了javaEE所规范的模式,Spring框架的主要目标是简化Java EE平台的开发,使开发人员可以更专注于业务逻辑,而非容器配置和其他样板代码。


比如上面的Servlet和JSP的映射关系,在spring里,可以由其MVC框架(也称为Spring Web MVC)将应用程序分解为模型、视图和控制器的模式,同时控制器可以通过注解来映射哪些请求应该由哪个方法处理,从而简化了Servlet和JSP映射配置,

b0573166bc04401dbff7f50b57552e58.png


除了springmvc以外,spring框架其实包含了多个包,其中 spring-core(包含spring-context、spring-beans、spring-aop)毫无疑问是重中之重。,这些核心包中包含了大量的底层设计,来帮助开发者减少代码负担


其中有两个功能和模式是最大的提升,能大量简化开发代码。这就是我们常说的Spring框架的两大核心 —— IOC 与 AOP


3. spring的特性

很多开发提及spring,都能知道Spring框架的两大核心 —— IOC 与 AOP,这也一直是面试高频题。但这两者对开发者有什么裨益却语焉不详了,我们就用最简单的话来解释一下


3.1 IOC(控制反转)

介绍:控制反转(Inversion of Control)的名字源于它对传统编程方法的反转。在传统编程方法中,程序员通过代码来控制各种对象之间的依赖关系,程序员需要显式地在代码中创建和管理各个对象并决定它们之间的依赖关系。而在IOC中,控制对象的创建和管理的不再是程序员自己,而是由容器来完成,即容器来“控制”对象的创建和管理,“反转”了对象的创建和管理的控制权

14a7b5d8fe224754b71c7735ba384509.png


很明显能看出,IOC的引入,将各组件解耦了。按照传统编码方式,我们在A类中显式的new 出一个B类,如果我们要把B类替换成一个BB类,那么A类这个地方的引用也需要修改,引用B的地方如果很多呢?那岂不是要大面积改动?


你也许会自然而然的想到,难道不能把B类和BB类都实现同一个接口,或者BB类继承自B,然后通过向上转型解决这个问题吗? 很高兴你有这种想法,这种想法是可行的。但从工程角度而言,限制太大,很多类没有接口或无法继承,那么就没法用这个方法了。


那么通过容器解耦到底是怎么实现的呢?其实是通过DI(依赖注入) 解决的

85431029cdce41ada083cea114db8aa8.png

可以看到传统模式,创建A对象,我就得新建个B和C,新建B又得新建C和D,如同套娃。而在IOC模式,创建A时,容器会主动为你寻找并装填B和C,不用你再新建(除非容器里也没有)。而提供B需要的C和D,同样不需要你管,容器会找到C和D,装填在B上,然后又把B为你装填在A上。


这种把A依赖的B和C主动装填上的模式,就叫依赖注入。依赖注入是IOC的一种具体实现,不仅让开发者不用频繁的new对象(尤其是对象还嵌套对象时),而且能减少重复对象,省事且省空间


3.2 AOP (面向切面编程)

AOP的基础是动态代理,而动态代理jdk和CGlib都可以实现,也就是说使用原始的java EE也是可以做出切面效果的,但是开发者得手动写大量的代码来进行切面的植入,而且往往还不具备通用性。


Spring则以框架的形式帮你完成了这部分代码,且实现了通用,你只需要按照要求,使用一些切面简单的配置就能完成大面积的切面增强


f0a1c7fd81a64530909f147454a78a7c.png

具体可以参考另一篇文章:Spring核心特性—— AOP(面向切面编程)


4. Spring的不足

我们说spring框架是为了减少传统java EE项目的配置强度和开发强度的,而且spring曾经的介绍是个

可以针对bean的生命周期进行管理的轻量级框架,然而,发展到现今的spring,功能越来越丰富,代码规模也越来越大,它“轻量级”的身份也不再那么贴合了。


此时的spring也逐渐露出诸多问题,由于日渐庞大的功能支持,导致使用者的学习成本大大增加且不说,就连其初衷也渐渐背离了,我们现在来说说spring的一些弊端:


  1. 配置繁琐,本身spring就是为了减少程序配置而创建的框架,然而发展至今,spring框架要做的功能和兼容也越来越繁杂,导致框架本身的xml配置也越来越多
  2. 复杂的体系,spring按照模块划分成了多个包,想用事务得引用spring-tx,测试得引用spring-test。对于初学者来说懵懂又麻烦
  3. 版本依赖,spring版本的升级很频繁,很容易出现spring组件间的版本冲突,需要手动管理各组件的版本依赖

目录
相关文章
|
19天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
15天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
15天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
65 1
|
23天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
143 1
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
147 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
2月前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
229 1
|
17天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
218 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统