Spring 一分钟入门

简介: 简言之,Spring 是一个开发应用框架。

前言


Spring 是什么?


简言之,Spring 是一个开发应用框架。


在企业里的开发不是从零开始一点点敲进去的,而是往框架里填充内容。


这就好像我们在 Leetcode 做题时,不需要写 signature,而是直接往里面写函数内容,这也算是个简陋的框架。


扩充开来:Spring 是一个开源的、轻量级的、Java SE/EE 的开发应用框架。


  • 重和轻,都是相对而言


  • Jave SE 的框架有很多,也是在不断迭代更新的,下文会阐述它们的更新之路。


那么何为重何为轻?


在使用时,有过多的接口和依赖,侵入性比较强,就叫重。


那么什么是侵入性?


在写代码的时候,需要去继承或者实现当前框架里很多 class/interface,这就是侵入性比较强。侵入性强也就是和这个框架的耦合度比较高,开发时会比较麻烦。


至于 Spring 这个架子搭了哪些内容,搭成了什么样子,本文不会展开,本文会站在一个 high level 的角度帮助大家建立整体的感知,了解 Java 框架的发展历史,拓宽我们的技术视野,具体内容我们之后慢慢来讲。


为什么要用 Spring


任何一项技术的产生都是为了解决现有的问题的,框架也不例外。


Spring 这个框架,提供了项目开发中的一些基础功能,可以使我们程序员更专注于业务逻辑的处理,具体来说我认为有3点最重要:


  • Spring IoC 容器管理了对象的生命周期和配置,不再使用 new 的方式创建对象,而是使用依赖注入,降低了组件之间的耦合度;


  • AOP 是 Spring 的核心,用来将一些通用的事务进行统一管理,常用于处理日志、安全管理和事务管理等方面。


  • Spring 并不强制项目完全依赖于 Spring,开发者可以自由选用 Spring 框架的部分来使用。比如我司的框架就是基于 Spring 来做的开发,在 Spring 的框架之上,可以添加我司自己的安全管理等等。


什么是架构


我们一直在说框架、架构,那它到底是什么呢?


从 dubbo 官网我们可以看到架构设计的发展演变史。


image.png


这里把架构分成四类:


  • 单一应用架构


  • 垂直应用架构


  • 分布式服务架构


  • 流动计算架构


刚开始时 PHP + MySQL 就可以形成网站了。


这种模式支持中小型网站是没有问题的,但是一旦形成大型网站就支撑不住了。


所以现在各大主流公司还是会选择 Java。


我们项目中的类会打包成一个 JAR 包运行在服务器里,最初所有模块是在一个 JAR 包的,也就是单一应用,随着用户量的提升、访问量的增大,JAR 包越来越大,单一应用运行起来越来越慢,所以单一架构就不再适合了。


此时引入分布式架构,把一个模块拆分成几个单独的模块以提升效率,一个 JAR 包分成几个 JAR 包运行在不同的服务器上,引入了 MVC 的设计模式。


随着业务量的剧增,几台服务器也已经不够用了,效率比较低,此时每个模块用 N 台服务器进行部署。


当请求进来之后,会按照一些策略,把它随机分配到负载均衡的服务器。此时每个服务器的 request 就比较少了,提高了效率。这个就是分布式服务架构。


每台服务器之间需要通信的,用的就是 RPC 框架。


当分布式架构也不够用了,最后演变成流式架构,此时 SOA 是关键。


Java 开发的主流框架演变之路


现在 Spring 基本占据主导地位了,那么在 Spring 广泛应用之前,有哪些主流框架呢:


JSP + Servlet + JavaBean


JSP 负责前端页面的控制,Servelt 负责服务器端的应用程序,JavaBean 是我们的对象,这样我们有了对象、有前端页面、有后台接受请求处理的服务器,就能够搭建一个从前端到后端的整体框架了。


但这个搭配有点麻烦,因为 JSP 既可以写标签,也可以内嵌 Java 代码,<% (Java code) %>,所有东西耦合在一起变得非常麻烦;


而现在纯的 HTML,支持 JS, 支持 HTML 标签,支持 CSS 样式,不支持插入 Java 代码,这就是 JSP 和 HTML 的最大的区别


现在企业中开发时比如 Spring Boot 的开发,更多的还是用 HTML,或者用一些前端框架比如 freemarker 进行代替,JSP 已经被慢慢淘汰掉了。


但问题时,当前端页面和后段服务器交互时,发送 N 多个 request,写 Servlet 时要写 N 多个对应的处理:


  • 在用2.5及之前的版本时,也就意味着写 N 多个 xml 文件;


  • 后面引入注解之后,依然要写 N 多个注解,非常麻烦。


而用 MVC 之后,非常简单,我们来看一下。


MVC = Model View Controller


image.png


这张图很好的展示了每个模块的功能和相互的联系:


用户在浏览器中发送请求之后,


browser 把这个请求发给了 controller,


需要它做一些处理,


然后发送到数据库中去查询,


得到结果之后,


把结果发给 View 层进行渲染,


用 html 的标签好看的表示出来,


渲染之后的结果再返回给 controller,


再返回到浏览器里显示出来。


比如在我们在点外卖时,你发送请求给服务员,服务员就是 controller 层,他需要处理订单比如查一下仓库里还有没有这些原材料,排好先后顺序再交给厨师等等,厨师做好之后他还需要再包装一下再送到你手上。


后面所有框架都是依托于 MVC 这种方式来设计的。


SSH = Spring + Struts + Hibernate


这个框架虽然也上了年纪了,但是一些老的项目还在用它。


特别是金融 IT 这一块,数据库 dao 层还是使用的是 Hibernate;而科技公司因为要用到高并发,dao 层用的是 MyBatis,数据交互效率较快。


回到 SSH 框架上来,用过的都知道,它配起来真的麻烦,太多的配置文件了。


SSM = Spring + SpringMVC + MyBatisSpring Boot


SSM 还是现在项目中比较常见的,但其实现在在新项目中用的也比较少了,更多的是用 Spring Boot,因为配置非常简单。


小结


以上就是 Spring 入门的介绍了,框架的演变是顺应人们需求的过程,一种框架的诞生是为了解决现有的问题,了解了老的框架的问题所在,才能更好的体会 Spring 带给我们的便利。

目录
相关文章
|
4天前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
4天前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
4天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
1天前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
1天前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
4天前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
4天前
|
SQL 数据库
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
这篇文章是Spring5框架的实战教程,深入讲解了如何使用JdbcTemplate进行数据库的批量操作,包括批量添加、批量修改和批量删除的具体代码实现和测试过程,并通过完整的项目案例展示了如何在实际开发中应用这些技术。
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
|
4天前
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
4天前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
4天前
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)