专栏首页村雨遥Spring 简介,带你打开 Spring 的大门

Spring 简介,带你打开 Spring 的大门

目录

  • 1. Spring 概览
    • 1.1 Spring FrameWok
    • 1.2 Spring Boot
    • 1.3 Spring Data
    • 1.4 Spring Security
    • 1.5 Spring Integration 和 Spring Batch
    • 1.6 Spring Cloud
  • 2. 什么是 Spring
    • 2.1 Spring 简介
    • 2.2 Spring 的优点
    • 2.3 Spring 的组成
    • 2.4 XML 配置 VS Java 配置
  • 3. 初始化 Spring 应用程序
    • 3.1 项目结构
    • 3.2 项目启动类

1. Spring 概览

Spring 其实是一个很大的范围概称,包含着许多分支,在正式了解 Spring 之前,我们先来看看 Spring 家族中的主要分支:

1.1 Spring FrameWok

Spring 领域中其他一切的基础,提供了 核心容器和依赖注入框架,还提供了一些基本数据持久性支持,特别是基于模板的 JDBC 文件。

1.2 Spring Boot

Spring Boot 不仅提供了 启动依赖和自动配置,还提供了如下的其他特性:

  1. Actuator 提供了对应用程序内部工作方式的运行时监控,包括端点、线程 dump 信息、应用程序健康状况和应用程序可用的环境属性。
  2. 灵活的环境属性规范。
  3. 核心框架的辅助测试之外的额外测试支持。

1.3 Spring Data

将应用程序的数据存储库抽象为简单的 Java 接口,同时当定义方法用于驱动数据进行存储和检索的问题时,对方法使用了命名约定。此外还能处理几种不同类型的数据库,包括包括关系型(JPA)、文档型(Mongo)、图型(Neo4j)等。

1.4 Spring Security

Spring Security 解决了广泛的应用程序安全性需求,包括身份验证、授权和 API 安全性等一系列工作。

1.5 Spring Integration 和 Spring Batch

Spring Integration 解决了实时集成,即数据在可用时进行处理。相反,Spring Batch 解决了批量集成的问题,允许在一段时间内收集数据,直到某个触发器(可能是一个时间触发器)发出信号,表示该处理一批数据。

1.6 Spring Cloud

Spring Cloud 是一组用 Spring 开发云本地应用程序的项目。

Spring 是为了减少 EJB 的复杂性而创建的一套解决方案,而 EJB 过于臃肿,使用 Spring 能够让 Java Bean 之间进行有效的解耦。而且 Spring 不仅仅局限于服务端的开发,在测试性和松耦合方面均有较好表现。

2. 什么是 Spring

2.1 Spring 简介

我们日常所说的 Spring,实际上指的是 Spring Framework,属于 Spring 家族的一个分支。

Spring 的核心是一个 容器,常称为 Spring 应用程序上下文,用于创建和管理应用程序组件。组件(或 Bean)在 Spring 应用程序上下文中连接在一起从而构成一个完整的应用程序。

那么是如何将各种 Bean 连接在一起呢?这就是 Spring 中最重要的特性之一:依赖注入(DI)

依赖注入(DI):通过依赖注入的应用程序 不是 由组件自身创建和维护其所依赖的其他 Bean 的生命周期,而是依赖于单独的实体(容器)来创建和维护所有组件,并将这些组件注入需要他们的 Bean

2.2 Spring 的优点

  • Spring 是一个开源免费框架,容器;
  • Spring 是一个轻量级的框架,非侵入式的;
  • 控制反转 IC,面向切面编程 AOP
  • 支持事务,支持框架;

2.3 Spring 的组成

图片源自网络

Spring 是一个分层架构,主要由如下 7 大模块所构成。Spring 模块位于核心容器,定义了创建、配置和管理 Bean 的方式。

  1. Spring Core:提供 Spring 框架基本功能,主要组件是 BeanFactory,是工厂模式的实现,通过 IOC 机制将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  2. Spring Context:一个配置文件,给 Spring 框架提供上下文信息,上下文包括 JNDI、EJB、电子邮件、国际化、校验和调度等企业服务。
  3. Spring AOP :通过配置管理特性,Spring AOP 直接将 AOP(面向切面)功能集成到 Spring 框架。从而我们能够十分方便的使用 Spring 框架来管理任何支持 AOP 的对象。模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用该组件,可以不依赖其他组件九江声明性事务管理集成到应用程序中。
  4. Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可以用来管理异常处理和不同数据库供应商抛出的错误信息。异常层次结构简化了错误处理,而且极大降低了需要编写的异常代码数量。Spring DAO 面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  5. Spring ORM:Spring 框架中插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map,这些都遵从 Spring 的通用事务和 DAO 异常层次结构;
  6. Spring Web:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,所以 Spring 框架支持与 Jakarta Structs 的集成。同时该模块还简化了处理多部分请求以及请求参数绑定到域对象的工作。
  7. Spring Web MVC:MVC 是一个全功能的构建 Web 应用的 MVC 实现,可以通过策略接口对 MVC 框架实现高度可配置。而且 MVC 还容纳了 JSP、Velocity、Tiles 等视图技术。

2.4 XML 配置 VS Java 配置

对于之前的版本,Spring 容器将各个组件连接起来的方式是通过 XML 配置,但现在的版本中更多的是使用基于 Java 的配置,如下面基于 XML 的配置等效于基于 Java 的配置。

  • 基于 XML 配置
<bean id="inventoryService" class="com.example.InventoryService" />
<bean id="productService" class="com.example.ProductService" >
    <constructor-arg ref="inventoryService" />
</bean>
  • 基于 Java 配置
@Configuration
public class ServiceConfiguration{
    @Bean
    public InventoryService inventoryService(){
        return new InventoryService();
    }

    @Bean
    public ProductService productService(){
        return new ProductService(inventoryService);
    }
}

在基于 Java 的配置中,@Configuration 向 Spring 表明该类是一个配置类,为 Spring 应用程序上下文提供 Bean。而 @Bean 注解则指示类方法返回的对象应作为 Beans 添加到应用程序上下文中。

那你可能想,既然之前有了 XML 配置的方式,那么为什么后来的版本中又加入了基于 Java 的配置方式呢?基于 Java 的配置方式相比于 XML 的配置方式,包含了更高的类型安全性和更高的可重构性。而且仅当 Spring 无法自动配置组件时,才需要通过 XML 的配置方式 或者 基于 Java 的配置方式 来进行显式配置。

自动配置自动装配 + 组件扫描。有赖于 组件扫描,Spring 能 自动从应用程序的类路径中发现组件,同时将其创建为 Spring 应用程序上下文中的 Bean。而通过 自动装配,Spring 将自动将组件与其所依赖的其他 Bean 一起注入

最近随着 Spring Boot 的推出,自动配置的优势进一步加强,在这种配置中,Spring Boot 将根据 类路径中的条目、环境变量和其他因素,合理猜测所需配置的组件,将其连接在一起。Spring Boot 中的自动配置大大减少了构建应用程序所需的显式配置的数量,增强了 Spring 开发的能力。

3. 初始化 Spring 应用程序

3.1 项目结构

对于一个 Spring 项目而言,其结构主要包括以下部分:

  1. src/main/java:该目录主要包含应用程序的源码,主要可分为如下几类:
    • build :工程启动类;
    • domain :实体类;
    • dao :数据访问层;
    • service :数据服务层,业务类代码;
    • controller :前端访问控制器;
    • config :配置信息类;
    • utils :工具类;
    • constant :常用接口类;
    • vo :数据传输类;
    • Application.java:项目的启动类;
  2. src/main/resources:相关资源文件。
  3. src/test/java:测试相关代码。
  4. src/test/resources:测试相关资源。
  5. pom.xml:Maven 构建规范,包含一些项目及依赖方面的配置。

3.2 项目启动类

项目启动类,即运行 jar 文件时用来引导应用程序执行的类,也就是项目结构中的 Application.java,下面是一个项目启动类的实例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TacoCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(TacoCloudApplication.class, args);
    }
}

其中 @SpringBootApplication 注解说明该类是一个 Spring 引导应用程序,但实际上它是组合了下列三个注解的复合应用注解:

  • @SpringBootConfiguration指定该类为配置类
  • @EnableAutoConfiguration启用 Spring 自动配置
  • @ComponentScan启用组件扫描。允许声明其他带有 @Component@Controller@Service 等注解的类,以便让 Spring 自动发现他们并将他们注册为 Spring 应用程序上下文中的组件。

作者 | 村雨遥

本文分享自微信公众号 - 村雨遥(cunyu1943),作者:村雨遥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 到底是个啥?

    Spring 是重量级企业开发框架 EJB(Enterprise JavaBean) 的替代品,是为了解决企业级应用开发的复杂性而创建的,简化开发。通过 依赖注...

    村雨遥
  • 什么是 Spring MVC?

    Spring MVC 是一个用于构建 Web 应用程序的 Java 框架,遵循 模型 - 视图 - 控制器 设计模式。它实现了一个 Spring 核心框架的所有...

    村雨遥
  • Spring 中的自动装配

    自动装配指使用 Spring 满足 Bean 依赖的一种方法,Spring 会在应用上下文中为某个 Bean 寻找其依赖的 Bean,主要有三种装配机制:

    村雨遥
  • 深入浅出,Spring 框架和 Spring Boot 的故事

    Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一。它目前由大量提供一系列服务的模块组成。包括模块容器,为构建横切关注点提供支持的...

    芋道源码
  • [译]2020年Spring状态报告

    近日VMware发布了2020年Spring状态报告,该报告调查了1000多位不同行业的springboot开发者、架构师、技术经理,以了解企业当前如何使用Sp...

    东溪陈姓少年
  • Spring实战(第4版)

    第4版针对Spring 4进行了全面更新。全书分为四部分。第1部分介绍Spring框架的核心知识。第二部分在此基础上介绍了如何使用Spring构建Web应用程序...

    用户3157710
  • 为什么说 Java 程序员必须掌握 Spring Boot ?

    Spring Boot 对测试的支持不可谓不强大,Spring Boot 内置了7种强大的测试框架:

    美的让人心动
  • 从零学习Spring(一)

    今天我们便踏上Spring框架的学习之路,熟悉此公众号的读者知道,公众号正在连载关于MyBatis,Spring MVC,Spring Boot框架的教程。如果...

    用户1093975
  • Spring,Spring MVC及Spring Boot区别

    我们说到Spring,一般指代的是Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代...

    用户7286770
  • 面试中问的话题Spring工作原理

    Spring工作原理 内部最核心的就是IOC了, 动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 反射其实就是在...

    哲洛不闹

扫码关注云+社区

领取腾讯云代金券