深入学习Spring框架 (1)

本文介绍Spring框架基础相关知识,欢迎学习,一起进步。


一.Spring的简介

  • Spring框架,由Rod Johnson开发。
  • Spring是一个非常活跃的开源框架, 基于IOC和AOP来构架多层JavaEE系统,以帮助分离项目组件之间的依赖关系。
  • 它的主要目地是简化企业开发。

在这里插入图片描述


二.Spring解决的问题

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

在这里插入图片描述


三.Spring相关特征

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,用于解决企业应用开发的复杂性问题。

  • 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

  • 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  • 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

  • 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

  • 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

  • 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。


四.Spring的组成

  • Spring框架包含的功能大约由20个模块组成。这些模块按组可分为核心容器、数据访问/集成,Web,AOP(面向切面编程)、设备、消息和测试
    在这里插入图片描述

五.Core核心模块

  • spring-core:依赖注入IoC与DI的最基本实现
  • spring-beans:Bean工厂与bean的装配
  • spring-context:spring的context上下文即IoC容器
  • spring-context-support
  • spring-expression:spring表达式语言

  • 详细说明
  • 1)spring-core
  • 这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
  • 2)spring-beans
  • 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control /Dependency Injection(IOC/DI)操作相关的所有类。如果应用只需基本的IOC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。
  • 3)spring-context
  • Spring核心提供了大量扩展,这样使得由 Core 和 Beans 提供的基础功能增强:这意味着Spring 工程能以框架模式访问对象。Context 模块继承了Beans 模块的特性并增加了对国际化(例如资源绑定)、事件传播、资源加载和context 透明化(例如 Servlet container)。同时,也支持JAVA EE 特性,例如 EJB、 JMX 和 基本的远程访问。Context 模块的关键是 ApplicationContext 接口。spring-context-support 则提供了对第三方库集成到 Spring-context 的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • 4)spring-expression
  • 为在运行时查询和操作对象图提供了强大的表达式语言。它是JSP2.1规范中定义的统一表达式语言的扩展,支持 set和 get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从SpringIoC容器检索对象,还支持列表的投影、选择以及聚合等。

  • 数据访问与集成层包含 JDBC、ORM、OXM、JMS和事务模块。

  • 1)spring-jdbc

  • 提供了 JDBC抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。

  • 2)spring-tx transaction的缩写,即是跟事务相关的配置

  • 支持编程式事务和声明式事务,可用于实现了特定接口的类和所有的 POJO
    对象。编程式事务需要自己写beginTransaction()、commit()、rollback()等事务管理方法,声明式事务是通过注解或配置由spring 自动处理,编程式事务粒度更细。

  • 3)spring-orm

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。

  • 提供了对流行的对象关系映射 API的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM框架和spring 的其它功能整合,比如前面提及的事务管理。
  • 4)spring-oxm

Spring3.0的一个新特性是O/XMapper。O/X映射器这个概念并不新鲜,O代表Object,X代表XML。它的目的是在Java对象(几乎总是一个plainoldJavaobject,或简写为POJO)和XML文档之间来回转换。

  • 模块提供了对 OXM 实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
  • 5)spring-jms

Java 消息服务( Java Message Service , JMS )是一个 Java 标准,定义了使用消息代理的通用API 。在 JMS 出现之前,每个消息代理都有私有的 API ,这就使得不同代理之间的消息代码很难通用。

  • 模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了 spring-messaging模块


  • Spring 处理Web层jar

  • Web 层包括 spring-web、spring-webmvc、spring-websocket、spring-webmvc-portlet 等模块。

  • 1)spring-web

  • 提供面向 web 的基本功能和面向 web 的应用上下文,比如 multipart 文件上传功能、使用 Servlet 监听器初始化IoC容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分

  • 2)spring-webmvc

  • 为 web 应用提供了模型视图控制(MVC)和 REST Web 服务的实现。Spring 的 MVC 框架可以使领域模型代码和web表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成

  • 3)spring-webmvc-portlet

  • (即Web-Portlet模块)提供了用于 Portlet 环境的 MVC 实现,并反映了 pring-webmvc 模块的功能


  • Spring AOP涉及jar
  • 1)spring-aop
  • 提供了面向切面编程(AOP)的实现,可以定义诸如方法拦截器和切入点等,从而使实现功能的代码彻底的解耦。使用源码级的元数据。
  • 2)spring-aspects
  • 提供了对 AspectJ 的集成

  • Instrumentation 模块涉及jar
  • 1)spring-instrument
  • 模块提供了对检测类的支持和用于特定的应用服务器的类加载器的实现。
  • 2)spring-instrument-tomcat
  • 模块包含了用于 Tomcat 的Spring 检测代理。

  • Messaging消息处理 涉及jar
  • spring-messaging 模块
  • 从 Spring 4 开始集成,从一些 Spring 集成项目的关键抽象中提取出来的。这些项目包括 Message、MessageChannel、MessageHandler和其它服务于消息处理的项目。这个模块也包含一系列的注解用于映射消息到方法

  • Test模块涉及jar
  • spring-test 模块
  • 通过 JUnit 和 TestNG 组件支持单元测试和集成测试。它提供了一致性地加载和缓存 Spring上下文,也提供了用于单独测试代码的模拟对象(mock object)

  • The best investment for young people is to invest in yourself
    在这里插入图片描述
  • 2020.03.23 来自辰兮的第35篇博客
发布了38 篇原创文章 · 获赞 155 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_45393094/article/details/105050214