一、为什么要使用Spring
1.1、OCP开闭原则
OCP 是软件七大开发原则当中最基本的一个原则:开闭原则,即 对扩展开放、对修改关闭;OCP原则 是最核心的,最基本的,其它六个原则都是为这个原则服务的。OCP原则 的核心是:只要你在扩展系统功能的时候,没有修改以前写好的代码,那么你写的程序就是符合OCP原则的。反之,如果在扩展系统功能的时候,你修改了之前的代码,那么这个设计就是失败的,违背OCP原则。当进行系统功能扩展的时候,如果动了之前稳定的程序,修改了之前的程序,之前所有的程序都需要进行重新测试。
1.2、依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,简称 DIP),主要倡导面向抽象编程,面向接口编程,不要面向具体编程,即 上层不再依赖下层 ,如果下面改动了,上面的代码不会受到牵连。依赖倒置原则的目的是降低程序的耦合度,提高扩展力。
1.3、控制反转
控制反转(Inversion of Control,简称IOC) 反转的是两件事。第一件事反转的是 创建对象的方式,即在程序中不采用硬编码的方式来 new 对象。第二件事反转的是 对象之间的关系,即在程序中不采用硬编码的方式来维护对象的关系。因此,控制反转的核心是:将对象的创建权交出去,将对象和对象之间关系的管理权交出去,交给第三方容器来创建与维护;
Spring框架 实现了 控制反转IOC 这种思想,即 Spring 框架可以帮你 new对象,可以帮你维护对象和对象之间的关系。Spring 是一个实现了 IOC思想 的容器。控制反转有多种实现方式,其中比较重要的是 依赖注入(Dependency Injection,简称DI)。控制反转是思想,依赖注入就是实现这种思想的具体实现。依赖注入DI 又包含两种常见的方式:(1)set注入,即执行 setXxx() 给属性赋值;(2)构造方法注入,即执行构造方法给属性赋值;依赖注入 中 依赖 指的是A对象和B对象的关系,注入 是一种手段,通过这种手段,可以让A对象与B对象产生关系。
二、Spring简介
Spring是轻量级的开源的JavaEE框架。它可以解决企业应用开发的复杂性。它最初是有 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。它有两个核心的部分:IOC和Aop;IOC(控制反转),把创建对象过程交给Spring进行管理。Aop(面向切面),不修改源代码的情况下,进行功能的添加。Spring框架主要有八部分组成,分别是Spring Core、Spring Contex、Spring AOP、Spring DAO、Spring ORM、Spring Web MVC、Spring WebFlux 和 Spring Web。
Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。Spring 框架的目标是使 Java EE 开发变得更容易使用,通过启动基于 Pojo 编程模型来促进良好的编程实践。
三、Spring的八大功能模块
功能模块 | 功能介绍 |
---|---|
Spring Core | 核心容器,在 Spring 环境下使用任何功能都必须基于 IOC 容器 |
Spring Context | 国际化消息(I18N)、事务传播、验证的支持、企业服务、Velicity 和 FreeMarker 集成的支持 |
Spring AOP | 面向切面编程 |
Spring DAO | 提供了单独的支持 JDBC 操作的 API |
Spring ORM | 支持集成常见的 ORM 框架 |
Spring Web MVC | Spring 自己提供了一套 MVC 框架 |
Spring WebFlux | Spring 提供的响应式 Web 框架 |
Spring Web | 支持集成常见的 Web 框架 |
注意:Spring5 之前没有 Spring WebFlux 模块;
①Spring Core 模块
这是 Spring 框架最基础的部分,它提供了 依赖注入(Dependency Injection) 特征来实现容器对 Bean 的管理。核心容器的主要组件是 BeanFactory,Beanfactory 是工厂模式的一个实现,是任何 Spring 应用的核心。它使用 IOC 将应用配置和依赖从实际的代码中分离出来。
②Spring Context 模块
如果说核心模块中的 BeanFactory 使 Spring 成为容器的话,那么上下文模块就是 Spring 成为框架的原因。这个模块扩展了 BeanFactory ,增加了对国际化(I18N)消息、事件传播、验证的支持。另外提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
③Spring AOP 模块
Spring 在它的 AOP 模块中提供了对面向切面编程的丰富支持,Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作。
④Spring DAO 模块
提供了一个 JDBC 的抽象层和异常层次结构,消除了烦琐的 JDBC 编码和数据库厂商特有的错误代码解析,用于简化 JDBC。
⑤Spring ORM 模块
Spring 提供了 ORM 模块。Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括Hibernate、JDO和 iBATIS SQL映射,这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
⑥Spring Web MVC模块
Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架。虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts,但 Spring 的MVC 框架使用 IOC 对控制逻辑和业务对象提供了完全的分离。
⑦Spring WebFlux模块
Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的。它是完全非阻塞的,支持反应式流(Reactive Stream)背压,并在 Netty,Undertow 和 Servlet 3.1+容器等服务器上运行。
⑧Spring Web模块
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,提供了Spring 和其它 Web 框架的集成,比如Struts、WebWork。还提供了一些面向服务支持,例如:实现文件上传的 multipart 请求。
四、Spring的特点
- 轻量级:从开发与开销两方面而言 Spring 都是轻量级的。完整的 Spring 框架可以在一个大小只有 1MB 多的 JAR 文件里发布。并且 Spring 所需的处理开销也是微不足道的。
- 非侵入式:使用 Spring 开发应用程序时,Spring 对应用程序本身的结构影响非常小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构,反而能将组件结构进一步简化。这就使得基于 Spring 开发应用层序时结构清晰,简洁优雅。
- 控制反转:IOC —— Inversion of Control,翻转资源获取方向。把自己创建资源,向环境索取资源变成环境将资源准备好,我们享受资源注入。Spring 通过控制反转技术做到的松耦合,当应用了 IOC,一个对象依赖的其它对象会通过被动的方式传递出来,而不是这个这个对象自己创建或者查找依赖对象。
- 面向切面编程:AOP —— Aspect Oriented Programming,在不修改源代码的基础上增强代码功能。Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统系服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的(完成业务逻辑)仅此而已。它们并不负责(甚至是意识)其它的系统关注点,例如日志或者事务功能。
- 容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。你可以配置你的每个 bean 如何被创建的即基于一个配置原型(prototype);你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何相互关联的。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
- 组件化:Spring 实现了使用简单的组件配置组成了一个复杂的应用。在 Spring 中可以使用 XML 和 Java注解 组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用
- 声明式:很多以前需要编写代码才能实践的功能,现在只需要声明需求即可由框架代为实现
- 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且 Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring 的基础上全部使用 Spring 来实现。
五、开发环境搭建
这里,我们只使用 Spring 的基础功能,需要导入的 jar 包有:spring-core-5.3.9.jar
、spring-beans-5.3.9.jar
、spring-context-5.3.9.jar
、spring-aop-5.3.9.jar
、spring-expression-5.3.9.jar
和 spring-jcl-5.3.9.jar
先将一个文件夹【lib】用来存放所需要的jar包。然后点击【File】选项,在弹出的对话框中选择【Project Structure...】选项,然后在弹出的选项卡中选择【Moudules】,然后在右边的选项栏中选择【Dependencies】,紧接着在下面的界面中点击 +
号,然后在弹出的对话框中选择【1 JARs or directories...】,然后在弹出的对话框中选择要导入的jar包,然后点击【OK】。然后在点击【Apply】即可。
JAR文件 | 描述 |
---|---|
spring-aop-5.3.9.jar | 这个 jar 文件包含在应用中使用 Spring 的AOP 特性时所需的类 |
spring-aspects-5.3.9.jar | 提供对 AspectJ 的支持,以便可以方便的将面向切面的功能集成进 IDE 中 |
spring-beans-5.3.9.jar | 这个 jar 文件是所有应用都要用到的, 它包含访问配置文件、创建和管理 bean以及进行 IOC/DI 操作相关的所有类。 如果应用只需基本的 IOC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。 |
spring-context-5.3.9.jar | 这个 jar 文件为 Spring 核心提供了大量扩展。 可以找到使用 Spring ApplicationContext 特性时所需的全部类, JDNI 所需的全部类,instrumentation 组件以及校验 Validation 方面的相关类。 |
spring-context-indexer-5.3.9.jar | 虽然类路径扫描非常快,但是 Spring 内部存在大量的类, 添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能。 |
spring-context-support-5.3.9.jar | 用来提供 Spring 上下文的一些扩展模块,例如实现邮件服务、视图解析、缓存、定时任务调度等 |
spring-core-5.3.9.jar | Spring 框架基本的核心工具类。 Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心, 当然你也可以在自己的应用系统中使用这些工具类。 |
spring-expression-5.3.9.jar | Spring 表达式语言。 |
spring-instrument-5.3.9.jar | Spring3.0 对服务器的代理接口。 |
spring-jcl-5.3.9.jar | Spring 的日志模块。 JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。 |
spring-jdbc-5.3.9.jar | Spring 对 JDBC 的支持。 |
spring-jms-5.3.9.jar | 这个 jar 包提供了对 JMS 1.0.2/1.1 的支持类。JMS 是 Java 消息服务。属于 JavaEE 规范之一。 |
spring-messaging-5.3.9.jar | 为集成 messaging api 和消息协议提供支持 |
spring-orm-5.3.9.jar | Spring集成ORM框架的支持,比如集成 hibernate,mybatis 等。 |
spring-oxm-5.3.9.jar | 为主流O/X Mapping组件提供了统一层抽象和封装, OXM是Object Xml Mapping。对象和XML之间的相互转换。 |
spring-r2dbc-5.3.9.jar | Reactive Relational Database Connectivity (关系型数据库的响应式连接) 的缩写。 这个 jar 文件是 Spring 对 r2dbc 的支持。 |
spring-test-5.3.9.jar | 对 Junit 等测试框架的简单封装。 |
spring-tx-5.3.9.jar | 为 JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持。 |
spring-web-5.3.9.jar | Spring 集成 MVC 框架的支持,比如集成 Struts等。 |
spring-webflux-5.3.9.jar | WebFlux 是 Spring5 添加的新模块,用于 web 的开发,功能和 SpringMVC 类似的, Webflux 使用当前一种比较流程响应式编程出现的框架。 |
spring-webmvc-5.3.9.jar | SpringMVC 框架的类库 |
spring-websocket-5.3.9.jar | Spring 集成 WebSocket 框架时使用 |
或者通过 Maven 的方式导入有关 Spring 的 jar包。如果只想使用 Spring 的 IOC 功能,那么仅需要引入 spring-context 即可。
<!-- 基于 Maven 的传递性,导入 spring-context 依赖即可导入当前所需有关 spring 的 jar包 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
标签:Web,5.3,15,框架,spring,jar,概述,Spring
From: https://www.cnblogs.com/nanoha/p/16829371.html