Spring Framwork入门简单介绍

1、概述

1.1、什么是框架?

框架(Framwork) : 框(指其约束性)架(指其支撑性),在软件设计中指为解决一个开放性问题而 设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更 迅速和方便地构建完整的解决问题的方案。

  • 框架就是为扩展而生的
  • 框架不能完整到解决特定的问题
  • 框架实际就是为后续工作提供一些方便易用的工具,简单来说就是为实际开发中提供解决特定问题的工具和类

1.2、Spring框架简介

  1. spring 框架是一个java平台,为开发java程序提供全面的基础架构支持。Spring处理基础接口,让我们可以专注于实际的业务工作中
  2. Spring 使我们能够从“普通的 Java 对象”(POJO)构建应用程序,并将企业服务非侵入性地应用于 POJO。此功能适用于 Java SE 编程模型以及全部和部分 Java EE。
  3. 我们从spring框架中的受益:
1、使 Java 方法在数据库事务中执行,而不必处理事务 API。

2、使本地 Java 方法成为 HTTP 端点,而不必处理 Servlet API。

3、使本地 Java 方法成为消息处理程序,而不必处理 JMS API。

4、使本地 Java 方法成为 Management 操作,而不必处理 JMX API。

2、框架模块

Spring为我们提供了一站式解决方案,但spring是模块化的,可以挑选我们适用的模块,不必要把所有模块引入
spring平台提供了约20个模块的功能。

spring模块功能

2.1、核心容器(Core Container)

核心容器由 Spring-core,Spring-beans,Spring-context,Spring-context-support和Spring-
expression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成

  • Spring-core 模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
  • Spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且 可以把配置和依赖从实际编码逻辑中解耦。
  • context 模块建立在由 core和 beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方 式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化(比如,使用资源束)、事件传 播、资源加载和透明地创建上下文(比如,通过 Servelet 容器)等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JMX 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。 Spring-context-support 提供了对第三方集成到 Spring 上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • Spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP2.1 规范中定义的统一表达式语言的扩展,支持 set 和 get 属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从 Spring IoC 容器检索对象,还支持列表的 投影、选择以及聚合等。

依赖关系如下:
在这里插入图片描述

2.2、AOP和检测

  • spring-aop 模块提供了AOP Alliance 兼容的面向方面的编程实现,我们可以定义方法拦截器和切入点,以干净地解耦实现应分离功能的代码。使用源级元数据功能,还可以将行为信息以类似于.NET 属性的方式合并到代码中。
  • 单独的spring-aspects模块提供与 AspectJ 的集成。
  • spring-instrument模块提供了在某些应用程序服务器中使用的类检测支持和类加载器实现。 spring-instrument-tomcat模块包含 Spring 的 Tomcat 的检测代理。

2.3、Messaging

spring-messaging模块,该模块具有来自* Spring Integration *项目的关键抽象,例如Message,MessageChannel,MessageHandler等,这些模块可作为基于消息的应用程序的基础。该模块还包括一组 Comments,用于将消息 Map 到方法,类似于基于 Spring MVCComments 的编程模型。

2.4、数据访问/集成

“数据访问/集成”层由 JDBC,ORM,OXM,JMS 和事务模块组成。
JDBC=Java Data Base Connectivity,
ORM=Object Relational Mapping,
OXM=Object XMLMapping,
JMS=Java Message Service

  • spring-jdbc 模块提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
  • spring-orm 模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模 块可以让这些 ORM 框架和 Spring的其它功能整合,比如前面提及的事务管理。
  • spring-oxm 模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
  • spring-jms 模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 Spring-messaging 模块。
  • 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。

2.5、Web

Web 层由spring-web,spring-webmvc,spring-websocket和spring-webmvc-portlet模块组成

  • spring-web 模块提供面向 web 的基本功能和面向 web 的应用上下文,比如多部分(multipart)文件上 传功能、使用 Servlet 监听器初始化 IoC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分。
  • spring-webmvc 模块为 web 应用提供了模型视图控制(MVC)和 REST Web服务的实现。Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进 行集成。
  • spring-websocket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服 务器端之间通信的两种方式。
  • spring-webmvc-portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 Spring-webmvc 模块的功能。

2.6、TEST

spring-test模块通过 JUnit 或 TestNG 支持 Spring 组件的unit testing和integration testing。它提供了 Spring ApplicationContext的loading和那些上下文的caching。它还提供了mock objects,可用于隔离测试代码。

3、使用场景

从在资源受限的设备上运行的嵌入式应用程序到使用 Spring 的事务 Management 功能和 Web 框架集成的成熟的企业应用程序,以前描述的构建模块使 Spring 在许多情况下成为逻辑上的选择。

3.1、典型的成熟 Spring Web 应用程序

Spring 的声明式事务 Management 功能使 Web 应用程序具有完全事务性,就像使用 EJB 容器 Management 的事务一样。所有的自定义业务逻辑都可以通过简单的 POJO 来实现,并由 Spring 的 IoC 容器进行 Management。其他服务包括独立于 Web 层的对发送电子邮件和验证的支持,可以选择在何处执行验证规则。 Spring 的 ORM 支持与 JPA,Hibernate 和 JDO 集成在一起;例如,在使用 Hibernate 时,可以 continue 使用现有的 Map 文件和标准的 Hibernate SessionFactory配置。表单控制器将 Web 层与域模型无缝集成,从而无需ActionForms或其他将 HTTP 参数转换为域模型值的类。

3.2、使用第三方 Web 框架的 Spring 中间层

有时情况不允许完全切换到其他框架。 Spring 框架不会强制使用其中的所有内容;它不是一个“全有或全无”的解决方案。使用 Struts,Tapestry,JSF 或其他 UI 框架构建的现有前端可以与基于 Spring 的中间层集成,从而可以使用 Spring 事务功能。只需要使用ApplicationContext连接业务逻辑并使用WebApplicationContext来集成的 Web 层。

3.3、远程使用场景

在这里插入图片描述
当需要通过 Web 服务访问现有代码时,可以使用 Spring 的Hessian-,Burlap-,Rmi-或JaxRpcProxyFactory类。启用对现有应用程序的远程访问并不困难。

4、依赖(引入项目中)

4.1、Spring 基础模块坐标

GroupIdArtifactIdDescription
org.springframeworkspring-aop基于代理的 AOP 支持
org.springframeworkspring-aspects基于 AspectJ 的方面
org.springframeworkspring-beansBean 支持,包括 Groovy
org.springframeworkspring-context应用程序上下文运行时,包括调度和远程处理抽象
org.springframeworkspring-context-support用于将通用第三方库集成到 Spring 应用程序上下文中的支持类
org.springframeworkspring-core其他许多 Spring 模块使用的核心 Util
org.springframeworkspring-expressionSpring 表达语言(SpEL)
org.springframeworkspring-instrument用于 JVM 引导的工具代理
org.springframeworkspring-instrument-tomcatTomcat 的检测代理
org.springframeworkspring-jdbcJDBC 支持包,包括数据源设置和 JDBC 访问支持
org.springframeworkspring-jmsJMS 支持包,包括用于发送/接收 JMS 消息的帮助程序类
org.springframeworkspring-messaging支持消息传递体系结构和协议
org.springframeworkspring-orm对象/关系 Map,包括 JPA 和 Hibernate 支持
org.springframeworkspring-oxmObject/XML Mapping
org.springframeworkspring-test支持单元测试和集成测试 Spring 组件
org.springframeworkspring-tx事务基础结构,包括 DAO 支持和 JCA 集成
org.springframeworkspring-web基本的 Web 支持,包括 WebClient 端和基于 Web 的远程处理
org.springframeworkspring-webmvcServlet 堆栈的基于 HTTP 的 Model-View-Controller 和 REST 端点
org.springframeworkspring-webmvc-portlet在 Portlet 环境中使用的 MVC 实现
org.springframeworkspring-websocketWebSocket 和 SockJS 基础结构,包括 STOMP 消息传递支持

4.2、Maven 依赖 Management

示例:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.21.RELEASE</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

指定maven库:
完整版:

<repositories>
    <repository>
        <id>io.spring.repo.maven.release</id>
        <url>http://repo.spring.io/release/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

milestones:

<repositories>
    <repository>
        <id>io.spring.repo.maven.milestone</id>
        <url>http://repo.spring.io/milestone/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

快照:

<repositories>
    <repository>
        <id>io.spring.repo.maven.snapshot</id>
        <url>http://repo.spring.io/snapshot/</url>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>
4.2.1、Maven“物料 Lists”依赖性

使用 Maven 时,可能会偶然混合使用不同版本的 Spring JAR。例如,可能会发现第三方库或另一个 Spring 项目将传递性依赖项引入了较旧的发行版。如果忘记自己明确声明直接依赖项,则可能会出现各种意外问题。

为了克服这些问题,Maven 支持“物料 Lists”(BOM)依赖项的概念。可以在dependencyManagement部分中导入spring-framework-bom,以确保所有 spring 依赖项(直接和传递)都处于同一版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.21.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

使用 BOM 的另一个好处是,根据 Spring Framework 工件,不再需要指定属性:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>

4.3、Gradle 依赖性 Management

要将 Spring 存储库与Gradle构建系统一起使用,需要在repositories部分中包含相应的 URL:

repositories {
    mavenCentral()
    // and optionally...
    maven { url "http://repo.spring.io/release" }
}
dependencies {
    compile("org.springframework:spring-context:4.3.21.RELEASE")
    testCompile("org.springframework:spring-test:4.3.21.RELEASE")
}

4.4、Spring 依赖关系并取决于 Spring

尽管 Spring 为各种企业和其他外部工具提供了集成和支持,但它有意地将其强制性依赖项保持在绝对最低限度:我们不必为了自动地找到和下载(甚至自动)大量的 jar 库而可以将 Spring 用于简单的用例。对于基本的依赖项注入,只有一个强制性的外部依赖项,即日志记录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值