【03-01】Spring初识

一、Spring的简介

在这里插入图片描述

1、 框架(framework)

  • 框架就是一些类和接口的集合,它提前定义好了一些实现,用户可以在这些类或接口的基础上,使用这些类快速形成某个领域或者某个行业的解决方案,简化开发的过程,提高开发的效率。

2、架构发展历程

  • 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行。
    架构图
  • 单一应用架构
    • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
  • 垂直应用架构
    • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
  • 分布式服务架构
    • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
  • 流动计算架构
    • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

2、 简介

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

3、核心词

  • 轻量:从大小与开销两个方面而言,Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring处理的开销也是非常小的。此外,Spring是非侵入式的,Spring应用中的对象不依赖于Spring的特定类。
  • 核心思想:控制反转(IOC)、依赖注入(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、付费专栏及课程。

余额充值