【Spring】1. Spring概要综述

在这里插入图片描述
虽然此文写起来简单但感觉是以后自己进行Spring知识体系构建的根基。

Spring了解

简而言之Spring是Java目前第一大框架,Spring框架是由于软件开发的复杂性而创建的,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益,Spring是一个全面的解决方案,它坚持一个原则:不从新造轮子。已经有较好解决方案的领域,Spring绝不重复性实现,比如:对象持久化和OR映射,Spring只对现有的JDBC,Hibernate等技术提供支持,使之更容易使用,而不做重复的实现。Spring框架有很多特性,Spring官网给出对Spring提供的功能如下:

Spring make java more simple
Spring make java more modern
Spring make java more reactive
Spring make java more productive
Spring make java more cloud-ready

用人话来说就是

  1. 让现有的技术更容易使用,
  2. 促进良好的编程习惯。
  3. 大大简化应用程序的开发。

Spring特性如下:
在这里插入图片描述

Spring框架

Spring框架是分模块存在,除了最核心的Spring Core Container(即Spring容器)是必要模块之外,其他模块都是可选,视需要而定。大约有20多个模块。
在这里插入图片描述
一般来说,Spring主要分为7个模块:在这里插入图片描述
Spring框架有很多特性,这些特性由7个定义良好的模块构成。
在这里插入图片描述

  1. Spring Core:Spring核心,它是框架最基础的部分,提供IOC和依赖注入特性。
  2. Spring Context:Spring上下文容器,它是BeanFactory功能加强的一个子接口
  3. Spring Web:它提供Web应用开发的支持
  4. Spring MVC:它针对Web应用中MVC思想的实现
  5. Spring DAO:提供对JDBC抽象层,简化了JDBC编码,同时,编码更具有健壮性。
  6. Spring ORM:它支持用于流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等。
  7. Spring AOP:AOP即,面向切面编程,它提供了与AOP联盟兼容的编程实现。

主要的Jar包如下(借鉴了大佬图):
在这里插入图片描述

Spring优点

Spring提供了良好的代码组织逻辑跟业务开发流程规范框架,因为如果我们要实现一个功能,代码量一般都是固定的,要不我们全自己写,要不我们用优秀的已经写好的各种组件,Spring就已经给我们提供了各种优秀组件,主要优点如下:

  1. IOC跟DI的支持

Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean,并且管理Bean的生命周期,践行着高内聚低耦合的设计理念。

  1. AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能

  1. 声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无需手动编程,以前重复的一些JDBC操作,统统不需我们再写了。

  1. 方便程序的测试

Spring对Junit4提供支持,可以通过注解方便的测试Spring程序。

  1. 粘合剂功能

方便集成各种优秀框架,Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

  1. 降低JavaEE API的使用难度

Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

Bean

在Spring中POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans。
JavaBean中的这个bean是豆荚的意思,顾名思义,JavaBean设计者的初衷是就是让这个类体现豆荚的封装性(豆荚把豌豆都封装在里面了)。JavaBean 类也是一个类,只不过这个类有一些特殊的特性而已如下:

1.如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:
java getXxx(),用来获取属性xxx。 setXxx(),用来修改属性xxx.。
2. 对于 boolean 类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。
3. 类中方法的访问属性都必须是public的。
4. 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的(个人感觉没那么严格)。

说白了JavaBean无非就是面向对象封装的一种良好体现,比如一般情况下 我们将实现业务的基本单元 比如person、dog等类,拥有年龄,身高,体重等基本属性。我们将这些基本属性封装成一个整体类,然后用逻辑判断层来处理这样的整体类。

核心思想

提到Spring永远离不开的两个话题就是 IOC跟AOP,先简单说下这两个词的概念:

IOC

SpringIOC核心就是 反射 + xml解析,
IOC容器(Inversion of Controller) 控制反转,Java思想是面向对象的开发,一个应用程序是由一组对象通过相互协作开发出的业务逻辑组成,那么如何管理这些对象,使他们高效地协作呢?抽象工厂、工厂方法设计模式”可以帮我们创建对象,生成器模式帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担。所以用另外的方式,如果对象需要的时候,就自动地生成对象,不用再去创建。

举个例子:原来我们饿了,就要自己买各种东西做饭,但是现在有了外卖之后,就可以订餐了,我们可以把我们的需求告诉美团,让他们给我们送饭。这里主导关系发生了变化,原来是我们自己,但是现在是美团。

Spring提出了一种思想:就是由Spring来负责控制对象的生命周期和对象间的关系。所有的类都会在Spring容器中登记,告诉Spring你是个什么东西,你需要什么东西,然后Spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转,在Spring代码中很难看到new 对象这样的操作了。

AOP

AOP(Aspect Oriented Programming)称为面向切面编程,有点方法增强的意思。AOP的核心其实就是动态代理。
设想下比如进行一个计算器的编写,需要实现加减乘除的运算,编写四种不同的方法。还有另外的两个需求是在每种运算之前和运算之后需要打印日志进行记录,需要进行数字合规的校验。我们就得考虑如何能简单地实现呢?

  1. 日志记录数据校验可重用的功能模块分离出来,然后在程序的执行的合适的地方动态地植入这些代码并执行。这样就简化了代码的书写。
    业务逻辑代码中没有参和通用逻辑的代码,业务模块更简洁,只包含核心业务代码。实现了业务逻辑和通用逻辑的代码分离,便于维护和升级,降低了业务逻辑和通用逻辑的耦合。

Spring通过配置的方式,而且不需要在业务逻辑代码中添加任何额外代码,就可以很好地实现上述功能。以上这种方式就是spring中实现的AOP:意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。

人话:通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中(以前跟过AOP代码好像是动态的在内存中组织处切面代码跟业务代码融合最终生成可执行代码);比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。

发展史

Spring Framework JDK
1.x 1.3:引入了动态代理机制,AOP 底层就是动态代理,所以 Spring 必须是 JDK 1.3
2.x 1.4:正常升级
3.x 5: 引入注解,Spring 3 最低版本是 Java 5 ,从此以后不叫1.x 直接叫x
4.x 6: Spring 4 是有划时代意义的版本,开始支持 Spring Boot 1.X
5.x 8:lambda 表达式等功能

目前Java 开发的标配: Spring Framwork 5、Spring Boot 2、JDK 8。

参考

Spring思维导图
Spring学习网站
Spring通俗说

发布了354 篇原创文章 · 获赞 2807 · 访问量 164万+

猜你喜欢

转载自blog.csdn.net/qq_31821675/article/details/105340337