03_01_Spring概述

一、Spring的简介

在这里插入图片描述

1. 简介

  • Spring 是一款目前主流的 Java EE 轻量级开源框架, 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。 自 2004 年 4 月,Spring 1.0 版本正式发布以来,如今2022年已经是 Spring 5的版本了。
  • Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。简而言之: Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。

2.详细描述

  • 轻量:从大小与开销两个方面而言,Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring处理的开销也是非常小的。此外,Spring是非侵入式的,Spring应用中的对象不依赖于Spring的特定类。
  • 核心思想:控制反转(IO)、依赖注入(DI)、面向切面编程(AOP)。
  • 容器:Spring创建和管理Bean对象的配置和生命周期的地方,包含:配置每个Bean如何被创建、Bean可以创建一个单独的实例或者每次需要时都生成一个新的实例、以及它们是如何相互关联的。
  • 框架:Spring可以将简单的组件配置、组合成为复杂的应用。
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库,整个应用程序的运行都依靠Spring。实际上Spring自身也提供了展示层的SpringMVC和持久层的SpringJDBC。

3.广义的Spring

广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。以下模块是以Spring Framework 为基础的:
子模块

4.狭义的 Spring

狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。它有两个核心部分: IoCAOP
核心Spring 是一种基于 Bean 的编程技术。 在实际开发中,服务器端应用程序通常采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao),Spring 致力于提供 Java EE 应用各层的解决方案,对每一层都提供了技术支持。在表现层提供了对 Spring MVC、Struts2 等框架的整合; 在业务逻辑层提供了管理事务和记录日志的功能;在持久层还可以整合 MyBatis、Hibernate 和 JDBC Template 等技术,对数据库进行访问。

5.Spring的特点

  • 低解耦,简化开发:Spring 就如一个大工厂,可以将所有对象的创建以及依赖关系的维护交给 Spring 管理。
  • 集成各种优秀框架:Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持。
  • 降低 Java EE API 的使用难度:Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 的应用变得简单。
  • 方便程序的测试:Spring 支持 JUnit4,可以通过注解地方式测试 Spring 程序。
  • 支持AOP 编程:Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
  • 支持声明式事务:只需要通过配置就可以完成对事务的管理,而无须手动编程。

二、Spring的体系结构

Spring 框架是一个分层架构,每个模块既可单独存在,又可与其他模块联合实现,其架构如下图所示:
结构图

  • Spring Core:Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Spring的所有功能都是借助IOC实现的。
  • Spring AOP:AOP模块是Spring的AOP库,为Spring容器管理的对象提供了对面向切面编程的支持。
  • Spring DAO:Spring 提供对JDBC的支持,对JDBC进行封装,允许JDBC使用Spring资源,同时还基于AOP模块提供了事务管理。
  • Spring ORM:Spring 的ORM模块提供对常用的ORM框架的管理和辅助支持,Spring支持常用的Hibernate,ibtas,jdo等框架的支持,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理。
  • Spring Context:Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源。增加了对国际化、事件传播,以及验证等的支持,此外还提供了许多企业服务以及对模版框架集成的支持。
  • Spring Web:WEB模块是建立于Context模块之上,提供了一个适合于Web应用的上下文。另外,也提供了Spring和其它Web框架(如Struts1、Struts2、JSF)的集成。
  • Spring Web MVC:WEB MVC模块为Spring提供了一套轻量级的MVC实现,是一个全功能的 Web 应用程序,容纳了大量视图技术,如 JSP、Velocity、POI等。

三、控制反转与依赖注入

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则。Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。IoC 容器是 Spring 框架中最重要的核心组件之一,它贯穿了 Spring 整个生命周期。

1.控制反转的理解

  • 在 Spring 应用中,创建Java 对象的控制权是掌握在 IOC 容器手里的,其大致步骤如下:
    (1)开发人员通过 XML 配置文件、注解、Java 配置类等方式,对 Java 对象进行定义,例如在 XML 配置文件中使用 标签、在 Java 类上使用 @Component 注解等。
    (2)Spring 启动时,IoC 容器会自动根据对象定义,将这些对象创建并管理起来。这些被 IOC 容器创建并管理的对象被称为 Spring Bean。
    (3)当我们想要使用某个 Bean 时,可以直接从 IOC 容器中获取(例如通过 ApplicationContext 的 getBean() 方法),而不需要手动通过代码(例如 new Obejct() 的方式)创建。
  • 在 Spring 应用中,IOC 容器掌握着主动权,调用者则变成了被动的一方,被动的等待 IOC 容器创建它所需要的对象(Bean), 这个过程在职责层面发生了控制权的反转,把原本调用者通过代码实现的对象的创建,反转给 IOC 容器来帮忙实现,因此我们将这个过程称为 Spring 的“控制反转”。

2.依赖注入的理解

在面向对象中,对象和对象之间是存在一种叫做“依赖”的关系。简单来说,依赖关系就是在一个对象中需要用到另外一个对象,即对象中存在一个属性,该属性是另外一个类的对象。控制反转核心思想就是由 Spring 负责对象的创建。在对象创建过程中,Spring 会自动根据依赖关系,将它依赖的对象注入到当前对象中,这就是所谓的“依赖注入”。

3.IOC的工作原理

  • 在 Java 软件开发过程中,系统中的各个对象之间、各个模块之间、软件系统和硬件系统之间,或多或少都存在一定的耦合关系。
    若一个系统的耦合度过高,那么就会造成难以维护的问题,但完全没有耦合的代码几乎无法完成任何工作,这是由于几乎所有的功能都需要代码之间相互协作、相互依赖才能完成。因此我们在程序设计时,所秉承的思想一般都是在不影响系统功能的前提下,最大限度的降低耦合度。
  • IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术,将代码的耦合度降低到最低限度,其主要步骤如下:
    (1)在配置文件(例如 Bean.xml)中,对各个对象以及它们之间的依赖关系进行配置;
    (2)我们可以把 IoC 容器当做一个工厂,这个工厂的产品就是 Spring Bean;
    (3)容器启动时会加载并解析这些配置文件,得到对象的基本信息以及它们之间的依赖关系;
    (4)IoC 利用 Java 的反射机制,根据类名生成相应的对象(即 Spring Bean),并根据依赖关系将这个对象注入到依赖它的对象中。
  • 由于对象的基本信息、对象之间的依赖关系都是在配置文件中定义的,并没有在代码中紧密耦合,因此即使对象发生改变,我们也只需要在配置文件中进行修改即可,而无须对 Java 代码进行修改,这就是 Spring IoC 实现解耦的原理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值