Spring框架介绍——第一章

在所有的框架体系中,Spring 框架是其中最明亮的一颗星星。Spring框架在Java的发展过程中是不可或缺的,其为Java 语言在企业级应用开发的推广中立下了汗马功劳。本章主要介绍Spring框架体系的生态系统和演化

Spring框架经久不衰,必定有一定的原因。其中很重要的一个原因便是保持活力。Spring框架根据当前时代的发展与理念的变更持续更新,使自己保持新鲜的活力。下面就简单介绍一 下 Spring 框架的发展过程。

1: Spring的进化

Spring进化分为四大阶段,如下
在这里插入图片描述

第一阶段:Spring 1.x——基于 XML的配置

Spring框架产生于一个特殊的时期,在那个时期,企业开发似乎走向向了一个解耦的极端中,倡导所有的配置与业务解耦,与逻辑无关的代码都抽象出来,作为配置端。在这个基础上,Spring 在第一阶段是完全使用XML进行配置的。

所有的Java Bean都需要在XML配置文件中声明,随着项目的扩大, 开发人员需要频繁地在配置置文件和Java文件中穿梭,且配置 文件自身也会变得非常笨重。

此阶段,Web 项目与Spring整合的方式也是通过XML配置。如下是一个web项目(该项目使用的就是Spring 1.x——基于 XML的配置)的目录
在这里插入图片描述

第二阶段: Spring2.x——基于注解的配置

随着Java版本的升级,在JDK 1.5中加入了对注解的支持,Spring 同时也为注解提供了支持,使用@Component标记Java Bean,启动时可以自动扫描所有标记了@Component注解的类,生成Java Bean。同时可以使用@Autowired 为Java Bean 注入其他Bean。这大大简化了XML的配置。

但是在这一阶段同时出现了注解配置和XML配置,由此产生了哪种配置更好的持续长久的争论。最终达成了一致,一些基本的 Java Bean使用注解配置,另外些特殊的需要属性的Bean使用XML配置,如数据源和数据库连接池等。

在此阶段,Web项目与Spring的整合方式与第一阶段没有区别。

第三阶段: Spring3.x——基于 Java的配置

在Spring 3.x中,提供了自由度更高的基于Java的配置,包@Configuration 声明配置类与@Bean声明Java Bean等。使用基于Java的配置,除了可以享受到Java动态化带来的动态生成Bean的特性,也使得代码有更好的可读性,更易理解各个Bean之间的关系。时代在慢慢倾向于无XML化

此阶段,Web项目与Spring的整合方式有了新的变化——基于Servlet 3.0注解的配置,可以替代web.xml。但由于普及度不高,多数使用Tomcat容器的项目,仍然采用web.xm去配置Tomcat 容器:使用基于web. xml的配置去整合Spring,同时使用XML配置Spring容器仍然是常见的方式。

第四阶段: Spring 4.x + Spring Boot基于 自动配置

面对普及度不太高的基于Java 的配置,突破的难点在于使用Tomeat和Servlet容器的应用,仍然会存在web.xml配置。在这种情况下,Spring 开创性地推出了SpringBoot启动框架使用内嵌Serlat 容器代替了原有基于容器的启动方式,顺其自然地去除了web.xml配置,完全打破了原有的启动方式,完成了”只用启动”即可的应用开发创举。

同时提供@ConfigurationProperties与配置文件自动解析,使其直接通过配置文件与Bean属性绑定,进一步简化 了应用的开发。

在此阶段,Web项目与Spring整合的方式与第三阶段可容器,启动入口变为一个普通整合,框架内部直接提供Web环境。因为使用了内嵌的serlet的main方法,完全取代了XML配置。如下是一个web项目(该项目就是Spring 4.x + Spring Boot基于 自动配置)的目录
在这里插入图片描述

第四阶段是重点,以后的章节均以此为基础进行讲解。

2:Spring的功能

Spring框架提供了IOC与AOP两大核心功能,
即控制反转(Inversion of Contol, IOC)和面向切面编程( Aspect Oriented Programming, AOP)。

  1. 控制反转

控制反转有时也被叫做依赖注入(Dependency Injection, DI)。其实依赖注入只是实现控制反转的一种方式, Spring 框架实现控制反转使用的就是依赖注入,通过依赖注入使得JavaBean的创建、引用、销毁的控制反转交给框架处理,使用方只需要声明需要依赖某个JavaBean,这个Bean就会被自动注入,这也是控制反转的核心概念。比如我们通过xml声明视图解析器Bean的方式

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

那么控制反转有什么优点呢?

首先,在没有控制反转之前,当我们需要使用A类的功能时,需要创建A类的实例,如果A类功能又依赖B类,则还需要把B类实例传递给A类或者在A类中直接创建B类实例。当系统越来越复杂时,各个类之间的依赖关系可能并不是简单的线性关系,复杂度会倍增,此时如果没有清晰的依赖关系图,整个系统的启动将会非常复杂,也很容易出现问题。

控制反转就是把各个类的管理控制权交给容器。当需要使用某个类时,容器会自动管理该类实例并交给使用方使用,管理策略为:如果容器中无此类实例,则自动创建实例并保存在容器中;如果已存在实例,则直接获取该实例。对于使用方而言,只需声明需要依赖的类即可被自动注入。例如,当A类需要使用B类实例时,只需要在A类中声明需要B类,框架就会自动将B类实例注入到A类中,以此实现各个类之间的解耦,降低系统的复杂度。

以如下项目为例,PublishController类需要用到PublishMapper接口,只需要在PublishController类中对PublishMapper进行声明。框架就会自动将PublishMapper类实例注入到PublishController类中
在这里插入图片描述

控制反转的主要目的是为了实现各个模块之间的解耦,降低各模块的耦合度。

  1. 面向切面编程

常见的编程方法有面向过程编程、面向对象编程等,那么面向切面编程又是什么呢? 大型应用中,一般会把逻辑单元按照功能分为多个层,如控制器层、服务层、数据操作层等,每个逻辑单元自身是按照面向过程和面向对象模式编写的,但是在各层逻辑单元相互调用时,会出现些公用的逻辑, 需要在 某一层的所有逻辑 单元执行。

以如下项目为例,当一个controller包下有很多类的时候,我们又要对每一个类进行异常处理的时候。我们可以利用AOP,对所有的异常进行集中处理。
在这里插入图片描述

而向切面的主要目的是为某一层添加统一功能, 减少代码的冗余。

这就是Spring的两大核心功能,其他所有的功能都是围绕这两个功能构建的。同时Spring使用了非常简单的方式实现这两大核心功能,大大降低了Java 开发的复杂性。Spring中的Bean都基于普通的Java对象(Plain Ordinary Java Obiject, POJO) 构建,为普通对象赋予了强大的功能,实现了轻量级和最小侵入性编程。

3:Spring模块介绍

Spring框架是基于模块化的设计,除了核心模块外,其他模块都是可插拔的,需要使用时引入模块即可。

每个模块的最小单元,Spring 都以单独的Jar包提供,基本模块如下图所示。
在这里插入图片描述
下面以Jar包为单位介绍各个模块的基本功能。

  1. 核心容器(Core Container)
    spring-core: 提供Spring框架的核心支持,包括各种工具包与基本注解,大多数其他模块都需要引入核心模块。
    spring-beans:提供Spring框架对Bean生命周期相关的支持,包括BeanFactory多组件。
    spring-contet:提供Spring上下文支持,包括ApplicationContext等组件。
    spring-expression:提供SpEL表达式支持。

  2. AOP
    为Spring提供面向切面编程的支持,包括ProxyFactory代理工厂等组件。

  3. Web应用模块
    spring-web: 提供对Web应用的支持,用于Web容器整合Spring 框架,如Tomcat等,
    spring-websocket:提供对WebSocket协议的相关支持。
    spring-webmvc:提供MVC框架,与Spring 框架无缝整合,并结合spring-web 为基于Servlet容器的Web应用提供MVC支持。
    spring-webflux:为Spring 提供基于Reactive 响应式编程的Web框架。不同于spring webmvc基于Servlet 容器,spring-webflux -般基于Netty 等异步网络框架,打破了原有Servlet 的统治地位。

  4. 数据访问集成(Data Access/Integration)
    spring-jdbc:提供对JDBC相关数据库操作的支持。
    spring-tx:提供对事务相关的支持。
    spring-orm:提供对对象关系映射的支持。
    spring-oxm:提供对对象XML实体映射的支持。

  5. Messaging
    为Spring提供各种消息队列支持,包括ActiveMQ、Kafka 等消息组件支持的核心。

  6. Test
    提供Spring框架测试组件相关支持。

除了以上这些核心模块之外,Spring 生态还有很多其他组件,如用于简化各种数据库操作的Spring Data, 用于支持快速开发的Spring Boot,还有比较流行的分布式微服务开发框架Spring Cloud等,这些都是基于Spring框架体系构建的简化开发的扩展框架。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值