Servlet 与Spring对比!

news2024/11/23 1:01:31

前言:

Spring相关的框架知识,算是目前公司在用的前沿知识了,很重要!!

那么以Spring为基础的框架有几个?

以Spring为基础的框架包括若干模块,其中主要的有Spring Framework、Spring Boot、Spring Cloud等。

  1. Spring Framework:这是最基础的Spring框架,它包括了ioc依赖注入,Context上下文、bean管理等功能模块。Spring框架的主要目的就是简化Java后端开发工作,它由20个左右不同的模块组成,这些模块分别是Test、Core Container(核心容器)、Data Access/Integration(数据访问/集成)、Web、AOP/Aspect(应用对象解耦)、Instrumentation和Messaging(检测消息)。
  2. Spring Boot:这个框架的目标是简化Spring应用和服务的创建、开发与部署,比如它可以简化配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能。
  3. Spring Cloud:它是一系列框架的集合,主要用于构建分布式系统,提供配置管理、服务发现、断路器、智能路由、微代理、控制总线等功能。

    在使用这些框架时,可以根据具体的需求来选择性地使用所需要的模块,以满足企业级应用开发的需求。

相比于Spring Framework和Spring Cloud而言,小编主要着重于Spring Boot框架相关的知识来进行讲解的!当然,Spring Boot也算是很常见的框架之一了!

Servlet痛点分析:

  1. 添加外部jar不方便,容易出错(比如:添加了一个不匹配的外部jar版本)
  2. 运行和调试的时候,需要配置tomcat,不方便
  3. 发布不方便,Servlet项目必须依靠外置的tomcat(外置的Web容器运行)
  4. 路由配置不方便,一个访问地址对应一个Servlet类!
  5. …………………………

Spring基础与核心概念:

官网:spring.io

一句话概述Spring:包含了众多工具方法的Ioc容器

那么,什么是容器??

容器是用来容纳某种物品的(基本)装置(如:水杯)

那么,我们之前课程所接触到的容器有哪些??

  • List / Map《——》数据存储容器
  • tomcat《——》Web容器
  • ……………………

Ioc:全文为:Inversion of Control(汉语意思为:控制反转)实际意义为:控制(权)反转

那么,也就是说:Spring是一个“控制反转”的容器!

A对象掌握B对象的控制权(实列化),但由于B对象参数等的改变,导致A对象如何控制B对象也会发生相应的变化,为解决这一问题,将B对象给第三方,此时,A对象对B对象的控制权转移/交接给第三方,这就是控制(权)反转!!

当最底层发生变化时,整个调用链都需要修改——》耦合!(耦合:两个/两个以上的对象,相互依赖)

接下来,我们来通过传统的解法来构造一个“车”吧!!

接下来,我们来看一下相关的代码吧:

车轮胎:

public class Tire {
    //车轮胎
    public int size=17;//车身尺寸

    public Tire (int size){
        this.size=size;
    }

    public void init(){
        System.out.println("size -->" +size);
    }
}

底盘:

public class Bottom {
    //底盘
    private Tire tire;

    public Bottom(int size) {
        tire=new Tire(size);
    }

    public void init(){
        System.out.println("do bottom");
        tire.init();
    }
}

车身:

public class Framework {
    //车身
    private Bottom bottom;

    public Framework(int size){
        bottom=new Bottom(size);
    }

    public void init(){
        System.out.println("do bottom");
        bottom.init();
    }
}

车:

public class Car {
    //车
    private Framework framework;
    public Car(int size){
        framework=new Framework(size);
    }

    public void init(){
        System.out.println("do Car");
        framework.init();
    }

    public static void main(String[] args) {
        Car car=new Car((20));
        car.init();
    }
}

上述代码的运行结果为:

但是,对于上述的代码,当我们对其增加一个属性:color颜色的时候,其相关代码就会发生大幅度的改变!其耦合性太高!因此,我们需要对其解耦操作:Ioc高级写法:

更改后的代码为:

车轮胎:

public class Tire2 {
    //车轮胎
    public int size=17;//车身尺寸
    private String color="红色";

    public Tire2(int size, String color) {
        this.size = size;
        this.color = color;
    }

    public void init(){

        System.out.println("size -->" +size + "color -->"+color);
    }
}

底盘:

public class Bottom2 {
    //底盘
    private Tire2 tire2;

    public Bottom2(Tire2 tire2) {
        this.tire2=tire2;
    }

    public void init(){
        System.out.println("do bottom2~~");
        tire2.init();
    }
}

车身:

public class Framework2 {
    //车身
    private Bottom2 bottom2;

    public Framework2(Bottom2 bottom) {
        this.bottom2 = bottom;
    }

    public void init(){
        System.out.println("do framework2~~");
        bottom2.init();
    }
}

车:

public class Car2 {
    //车
    private Framework2 framework2;
    public Car2(Framework2 framework2){
        this.framework2=framework2;
    }

    public void init(){
        System.out.println("do Car2~~~");
        framework2.init();
    }

}

测试类:

public class Test {
    //测试类
    public static void main(String[] args) {
        Tire2 tire2=new Tire2(20,"黑色");
        Bottom2 bottom2=new Bottom2(tire2);
        Framework2 framework2=new Framework2(bottom2);
        Car2 car2=new Car2(framework2);
        car2.init();
    }
}

那么,上述代码的运行结果为:

那么,经过上述的代码,我们可以看出:

Ioc不是一个具体的技术,它是一个思想(控制权转移)!

Ioc最比较重要的功能:解耦

既然Spring是一个Ioc(控制反转)容器,重点还在“容器”二字上,那么,它就具有两个最基础的功能:

  1. 将对象存入到容器(存对象)
  2. 从容器中取出对象(取对象)

上面两个是Spring Ioc最核心(基础)操作!!


Spring是一个Ioc容器,说的是对象的创建和销毁的权利都交给Spring来管理了,它本身具备了存储对象和获取对象的能力!

那么,我们来看一下:Spring Ioc的优点:

  1. 解耦
  2. 使用更加方便(不需要手动创建和关注这个对象背后的依赖关系)
  3. 更加高效

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三十八、【进阶】最左前缀法则

1、理解 最左前缀法则,如果索引了多列(联合索引),要遵守最左前缀法则,最左前缀法则是致,查询从索引的最左列开始,并且不跳过索引中的列。 如果跳过某一列,索引将部分失效(该索引后面的字段索引全部失效)。 …

锐捷EG易网关 phpinfo.view.php 信息泄露

致未经身份验证获取敏感信息 访问漏洞url: /tool/view/phpinfo.view.php漏洞证明: 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何…

代码签名证书如何申请

代码签名证书也称之为软件数字证书,也可以叫作微软信任证书,主要给软件进行身份确定及保护知识产权,也可以被操作系统给信,对于软件开发企业是一项最基本的产品之一。 代码签名证书分为OV和EV两种类型,虽然认证步骤大同…

爬取抖音用户的个人基本信息

今年夏季,大概七八月份,刀郎开通抖音账号,并在抖音上发布多首作品,一时之间其热度暴涨,其粉丝也是与日俱增。 有人为了蹭热度,直播刀郎粉丝的实时变化情况,直播热度最高的时候同时几千人在线观…

SpringBoot内置工具类之断言Assert的使用与部分解析

先例举一个service的demo中用来验证参数对象的封装方法,使用了Assert工具类后是不是比普通的 if(xxx) { throw new RuntimeException(msg) } 看上去要简洁多了? 断言Assert工具类简介 断言是一个判断逻辑,用来检查不该发生的情况&#xff…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远控介绍及界面编写

红队专题 招募六边形战士队员[1]远控介绍及界面编写1.远程控制软件演示及教程简要说明主程序可执行程序 服务端生成器主机上线服务端程序 和 服务文件管理CMD进程服务自启动主程序主对话框操作菜单列表框配置信息 多线程操作非模式对话框 2.环境:3.界面编程新建项目…

MD5加密后16位与32位的区别 [ 详细 ]

文章目录 前言MD5加密算法说明MD516位和32位有何区别关于MD5的一些常见问题1、使用MD5对密码加密有什么用?2、为什么通过md5.cn在线加解密站还能解出明文呢? 总结 前言 MD5是HASH函数的一种,HASH函数又称杂凑函数,是在信息安全领…

Spark新特性与核心概念

一、Sparkshuffle (1)Map和Reduce 在shuffle过程中,提供数据的称之为Map端(Shuffle Write),接受数据的称之为Redeuce端(Shuffle Read),在Spark的两个阶段中,总…

C语言_断言assert详解

一、assert定义 assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句: if(假设成立) {程序正常运行&…

PYTHON+CH341 3线SPI驱动UC1601 LCD实现汉字显示

前言 参考大佬用CH341驱动OLED,链接如下:GitHub - jimjiang2/ch341dll_wrap_typical_app: A ch341dll Wrap is for using in Python 32bits windows to access I2C SPI and MDIO (by GPIO), and Demo with display PC sreen on OLED by i2c or SPI . 本文主要实现了…

C++设计模式_17_Mediator 中介者

Mediator 中介者也是属于“接口隔离”模式。 文章目录 1. 动机 (Motivation)2. 模式定义3. 结构(Structure)4. 要点总结5. 其他参考 1. 动机 (Motivation) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系…

【python】pip的使用

切换默认源 pip config set global.index-url 源地址 查看切换源是否成功:pip config list 常用镜像源 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云:https://mirrors.aliyun.com/pypi/simple/豆瓣:https://pypi…

入学生活科研随笔

近而立之年,巅峰享受的时期有两段。一是高考后,收到入学通知书。早晨,八点多,我醒来在院子里看到,爸爸在门口和邮政快递员寒暄。那天应该是8月15号,清晨凉凉爽爽的,杨树遮住了大半个院子。第二段…

matlab中filter帮助文档中“对矩阵行进行滤波”的解释

1、创建向量 % 创建一个由随机输入数据组成的 215 矩阵。 rng("default") %固定随机数种子 x randi(5,2,6) 结果 x 5 1 4 2 5 1 5 5 1 3 5 5 2、定义有理传递函数的分子和分母系数。 b 1; a [1 -0.2]; 3、沿着…

MATLAB R2018b详细安装教程(附资源)

云盘链接: pan.baidu.com/s/1SsfNtlG96umfXdhaEOPT1g 提取码:1024 大小:11.77GB 安装环境:Win10/Win8/Win7 安装步骤: 1.鼠标右击【R2018b(64bit)】压缩包选择【解压到 R2018b(64bit)】 2.打开解压后的文件夹中的…

【开源】基于SpringBoot的天然气工程运维系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

【APUE】并发 — 信号

目录 一、异步与同步 二、信号的概念 三、signal 函数 3.1 函数原型 3.2 代码示例 四、信号的不可靠 五、可重入函数 反例1:函数内使用了静态数据 反例2:函数内使用了 malloc 或 free 反例3:函数内调用了标准 I/O 函数 六、标准…

基于鸡群算法的无人机航迹规划-附代码

基于鸡群算法的无人机航迹规划 文章目录 基于鸡群算法的无人机航迹规划1.鸡群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鸡群算法来优化无人机航迹规划。 1.鸡群搜索算法 …

Docker Harbor概述及构建

Docker Harbor概述及构建 一、Docker Harbor 概述1.1、harbor 简介1.2、Harbor的优势1.3、Harbor 的核心组件1.4、Docker私有仓库 架构 二、Harbor构建Docker私有仓库2.1 环境配置2.2、部署Harbor服务2.2.1、上传dock-compose,并设置权限2.2.2、安装harbor-offline-…

C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考…