【Spring框架核心】Spring入门知识总结
前言
Spring入门知识总结
一、什么是软件模块化,有什么用?
把软件分成若干个不同的模块,这样就可以让不同的人去开发不同的模块。
还有一种更加常用的方法,把软件分成若干个层次。最简单的分法就是视图层-模型层。
两层的风格是完全不同的,视图层是面向功能的,而模型层更加复杂,都是面向对象的。进一步划分:由于视图层和模型层截然不同的风格,我们在中间插入一个控制层,并且把模型层分成若干个小层,如图。
划分后:跟界面有关的代码在界面层, 跟逻辑有关的代码在服务处, 跟数据存储有关的代码在数据访问层和映射层,数据和跟数据逻辑密切相关的代码在实体层。
好处 :1, 不同层采用不同的技术来实现 2,每一层都可以独立测试 3,代码的变更也可以更有效的控制在同层之内,不会影响其他层次。
不同的模块化方式也会影响,我们把它部署在物理服务器上的情况,不同的层次是可以部署在不同的物理服务器上的。
一般的做法我们把视图层单独部署在web服务器上, 这台服务器只存储它的静态网页和图片。
模型层通常都是部署在应用服务器上,通常是Tomcat,或Netty所构成的应用服务器。
而数据层则会存储在数据库服务器上。
好处: 提高性能
二、Spring技术栈
我们在上面看到, Spring框架主要是用于实现在服务器上面的控制器层 ,逻辑层上的代码。
Spring提供两种技术栈来实现代码
1.传统的阻塞式的Servlet技术栈
原理:当客户端向服务器端发起一个请求的时候,服务器端则会针对每一个请求去开启一个线程。
来处理这个请求,在这个线程里他会读取网络的数据,去读取数据库,做计算,最后产生返回给前端的结构返回回去。这些操作都是在一个线程中完成的。同样的当多个请求来访问是服务器就会开启多个线程,而占用更多内存。同时CPU也要给出更多的资源来进行线程切换。我们知道,每一台物理服务器的内存和CPU是有限的。一般做一个线程池去限制它能处理的线程。
问题:在服务上运行的每一个请求其实都包含着一些慢速操作。如通过网络去读取数据,通过网络去读取数据库。这些跟io有关的操作会使线程出于阻塞式,不能充分利用CPU资源。又因为之前我们使用了线程池来限制,导致新的线程不无法处理。虽然此时我们的线程不忙。
2.非阻塞的响应式技术栈
他会把整个任务分成若干个任务,如运行这类高速任务 和 IO这样慢速任务 。他会把IO操作至于一个事件队列当中来侦听他是否有完成一个慢速的操作。所以慢速的操作并不会独占一个线程,从而使我们有限的资源被慢速操作阻塞了。只有当慢速操作完成以后他才会开启线程去执行高速操作。
好处:再这样一种模式下,CPU不会再因为IO操作出于等待操作,使用在有限的物理环境下能处理更多的线程。
用途:对于IO操作特别频繁的 如用webFlux微服务的网关。采用到。平时用传统的Servlet技术栈即可。
由于这两种模式是完全不同的,所以它的用的框架是完全不同的。
三、Sevlet技术原理
Servlet是运行在服务器上的java程序,且是在一个容器当中运行的。可以认为是我们的应用服务器。
当Web浏览器(action=“”,method=“”)发送来http协议时,我们会去调用(Servlet-mapping)对应的 Servlet容器,并接受到前端发来的数据,读写数据库,用java代码写如何处理,再用Response返回前端。
Servlet特性
- Servlet容器负责对Servlet类的创建,他会把http请求对应到在配置文件所定义的Servlet对象中间。
- 提供listener可以在Servlet对象的全生命周期,创建初始化一直到销毁中间做我们想做的代码。
- 提供安全性功能,可以定义拦截器interceptor来检查Http请求,提升安全性。
- 最重要的特性是 他支持多并发,支持一以多线程的形式,支持多个用户同时访问服务器。