Spring概述及组成

一 概述

Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

Spring在不同的上下文中含义不同。它可以用来指代 Spring Framework 项目本身,这就是一切的开始。随着时间的推移,其他 Spring 项目已经构建在 Spring 框架之上。大多数情况下,当人们说Spring时,他们指的是整个项目系列。

Spring 框架分为多个模块。应用程序可以选择他们需要的模块。核心是核心容器模块,包括配置模型和依赖注入机制。除此之外,Spring Framework 为不同的应用程序架构提供基础支持,包括消息传递、事务数据和持久性以及 Web。它还包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 反应式 Web 框架。

Spring框架由很多模块组成,他们完成不同的工作;主要分为核心模块,数据集成模块,web模块和其他模块这几大类。

59e43b61a138a859d0e40cf3e0d60a0b.png

二 核心模块

  • Spring-core 模块提供了框架的基本组成部分,包括 控制反转(IoC) 和依赖注入(DI)功能;IoC 也称为依赖注入 (DI)。这是一个过程,其中对象仅通过构造函数参数、工厂方法的参数或在对象实例被构造或从工厂方法返回后在对象实例上设置的属性来定义它们的依赖项(即,它们使用的其他对象) . 然后容器在创建 bean 时注入这些依赖项。这个过程基本上是 bean 本身的逆过程(因此得名,控制反转),通过使用类的直接构造或诸如服务定位器模式之类的机制来控制其依赖项的实例化或位置。

  • Spring-beans 模块提供 BeanFactory,可以把配置和依赖从实际编码逻辑中解耦,主要完成bean管理;

  • Context 模块建立在由 core和 beans 模块的基础上建立起来的,context 模块继承自 beans 模块,并扩展了beans模块;并添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过 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 容器检索对象,还支持列表的投影、选择以及聚合等。

三 数据集成模块

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

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

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

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

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

四 web模块

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

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

  • Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。

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

五 其他模块

  • AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。

  • Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。

  • Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。

  • Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了接受和处理来自 WebSocket 客户端的 STOMP 信息。

  • 测试 模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。

六 官方文档

https://docs.spring.io/spring-framework/docs/current/reference/html/

七 调试源码

1 下载源码导入idea

2 对spring-test项目做junit测试,测试项目是否正常运行

a5eb7dc43085565d9d2d47772d4a34ba.png

3 新建spring-debug模块,选择gradle项目,选父项目为spring

4 拷贝spring-test模块gradle内容到spring-debug模块gradle内;修改描述为Spring Debug

cbb763ce64a0929a71453256adbee25d.png

5 创建测试bean

84150bb85d92db929662671cbb76bb58.png

package com.demo.test;


/**
 * @ClassName MyTestBean
 * @Description
 * @Author qiaorui10
 * @Date 2021/8/5 9:10 下午
 * @Version 1.0
 */
public class MyTestBean {


  private String testStr = "testStr";


  public String getTestStr() {
    return this.testStr;
  }


  public void setTestStr(String testStr) {
    this.testStr = testStr;
  }
}

6 创建bean配置文件

e861cebd0da700e43daff4a45591e5c8.png

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">


  <bean id="myTestBean" class="com.demo.test.MyTestBean"/>


</beans>

7 创建测试类

45c62db181661cdd93b4621c8f17ecf9.png

package com.demo.test;


import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import static org.assertj.core.api.Assertions.assertThat;




/**
 * @ClassName MyTestBeanTest
 * @Description
 * @Author qiaorui10
 * @Date 2021/8/5 9:13 下午
 * @Version 1.0
 */
class MyTestBeanTest {


  @Test
  void test() {
    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beanTest.xml");
    MyTestBean bean = (MyTestBean) classPathXmlApplicationContext.getBean("myTestBean");
    assertThat(bean.getTestStr()).isEqualTo("testStr");
  }
}

8 debug跟源码即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值