【Spring&SpringBoot】整理

本文详细介绍了SpringBoot框架的发展史、基本架构、核心模块(包括IoC/DI、AOP、Web模块、测试模块)、SpringMVC的特性和工作流程,以及DI和AOP的实现原理。涵盖了SpringBoot在企业应用中的关键组件和使用策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


【注】:本专题围绕框架核心概念展开,渐进式深入总结学习、面试、开发经验,集中整理便于回顾

持续补充与施工中~~~~

1.发展史

Spring发展史

2.基本架构

Spring框架的基本架构是一个分层架构,包括多个模块,每个模块都有不同的职责。以下是Spring框架的基本架构组成:(Spring 5.x)
Spring5

2.1 核心容器(Core Container):

2.1.1 Beans模块:

提供了Spring框架的核心功能,包括IoC(控制反转)和依赖注入。在这个模块中,定义了BeanFactory接口,以及其实现类DefaultListableBeanFactory,用于管理Bean的生命周期和依赖关系。

2.1.2 Core模块:

提供了Spring框架的核心功能,包括IoC容器的基本实现,如ApplicationContext接口及其实现类。ApplicationContext是一个高级的BeanFactory,提供了更多的企业级功能,例如事件传播、国际化支持等。

2.1.3 Context模块:

提供了访问定义和配置的对象的方式。ApplicationContext是Context模块的核心。除了Core模块的功能外,它还包括对AOP(面向切面编程)和事件传播的支持。

2.2 数据访问/集成(Data Access/Integration):

2.2.1 JDBC模块: 提供了对Java数据库连接的支持,简化了数据库访问操作。
2.2.2 Transaction模块:

提供了声明式事务管理的支持,允许通过注解或XML配置来管理事务。

2.2.3 ORM模块:

提供了对对象关系映射(ORM)框架的支持,例如Hibernate。通过该模块,Spring简化了与数据库的交互,并支持不同ORM框架的集成。

2.3 面向切面编程(AOP):

2.3.1 AOP模块:

提供了面向切面编程的支持。通过AOP,可以在不修改原有代码的情况下,将横切关注点(如日志、事务管理等)模块化。

2.4 Web模块:

2.4.1 Web模块:

提供了构建Web应用程序的支持。包括对Servlet、JSP、WebSocket、REST等的集成。

2.4.2 Web MVC模块:

提供了用于构建Web应用程序的MVC(Model-View-Controller)框架。

2.4.3 WebSocket模块:

提供了对WebSocket通信的支持。

2.4.4 WebFlux

提供了响应式编程框架

2.5 工具模块(Instrumentation):

Instrumentation模块: 提供了在运行时检测和探查应用程序的工具,支持在应用程序的类加载阶段进行字节码增强。

2.6 消息(Messaging):

Messaging模块:

提供了对消息传递的支持,包括JMS(Java消息服务)和STOMP(简单文本协议)。

2.7 测试模块(Testing):

Test模块:

提供了对Spring应用程序进行单元测试和集成测试的支持。

小结:

总体而言,Spring框架的核心思想是通过IoC和AOP来降低组件之间的耦合性,提高代码的可维护性和可测试性。每个模块都有明确定义的职责,使得开发者可以根据项目的需求选择性地引入和使用不同的功能模块。这种分层的设计使得Spring框架在企业应用开发中变得非常灵活和可扩展。

3.Spring MVC

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。
Spring MVC(Model-View-Controller)是Spring框架中用于构建Web应用程序的模块。它是一种基于MVC设计模式的Web框架,用于将应用程序的逻辑、表示和用户输入分离开来。以下是Spring MVC的主要特点和组成部分:

3.1特点:

松耦合:
Spring MVC采用了MVC设计模式,通过将应用程序分为模型(Model)、视图(View)和控制器(Controller),实现了组件之间的松耦合,使得每个组件的修改不会对其他组件产生直接影响。

可扩展性:
通过使用拦截器(Interceptors)、视图解析器(View Resolvers)等机制,Spring MVC具有很高的可扩展性,开发者可以方便地添加新的功能和定制组件。

灵活的请求映射:
支持基于注解和XML配置的请求映射,使得请求的处理方法可以根据URL的不同进行映射,提高了灵活性。

数据绑定:
Spring MVC支持将请求参数绑定到方法的参数上,简化了参数的获取和验证。

表单处理:
提供了方便的表单处理机制,支持表单数据的绑定和验证。

RESTful支持:
Spring MVC对RESTful风格的Web服务提供了良好的支持,通过注解可以方便地定义RESTful风格的API。

集成其他Spring模块:
可以很容易地与其他Spring模块集成,如Spring IoC容器、Spring AOP等,实现全栈式的开发。

3.2组成:
DispatcherServlet:

是Spring MVC的前端控制器,负责接收HTTP请求并将请求分发给相应的处理器(Controller)。

HandlerMapping:

负责将请求映射到处理器(Controller),确定具体哪个Controller处理请求。

Controller:

处理用户请求的业务逻辑,接收用户输入、调用服务层处理业务,并返回模型数据给视图。

Model:

用于封装业务逻辑产生的数据,由Controller负责处理和返回给视图。

View:

负责展示模型数据,将用户界面呈现给用户。

ViewResolver:

负责根据逻辑视图名解析成具体的视图对象,使得Controller可以专注于业务逻辑而不关心具体的视图。

HandlerInterceptor:

拦截器,用于在请求处理前、请求处理后、视图渲染前等时机执行一些额外的逻辑,例如权限检查、日志记录等。

ModelAndView:

封装了视图和模型的信息,用于告知DispatcherServlet返回哪个视图,并包含要传递给视图的模型数据。

3.3 SpringMVC和Servlet的区别与联系

Servlet:单例,不安全。性能最好,处理Http请求的标准,只处理doPost(),doGet()方法。
SpringMVC:单例,不安全。开发效率高(好多共性的东西都封装好了,是对Servlet的封装,核心的DispatcherServlet最终继承自HttpServlet)。DispatcherServlet又叫前端控制器,能过滤处理所有的请求方法。DispatcherServlet还能查询HandlerMapping查找到相应的handler,进而调用相应的service和Dao
———推荐阅读:SpringMVC和Servlet的区别与联系

3.4Spring MVC请求处理流程:
  1. 客户端发送HTTP请求至DispatcherServlet。
  2. DispatcherServlet根据HandlerMapping找到匹配的Controller。
  3. Controller处理请求,调用服务层(Service)处理业务逻辑。
  4. Controller将模型数据封装在ModelAndView中,并返回。
  5. DispatcherServlet选择适当的ViewResolver,将逻辑视图名解析为具体的视图。
  6. 视图负责渲染模型数据,生成最终的响应。
  7. DispatcherServlet将响应返回给客户端。
    Spring MVC通过上述机制实现了一个清晰、灵活的Web开发框架,支持多种视图技术(JSP、Thymeleaf等),并提供了强大的拓展能力,使得开发者可以根据项目需求灵活选择不同的组件和技术。

4.IOC(Inverse Of Control)

IOC容器:

BeanFactory: Spring框架最基本的IOC容器,提供了基本的IOC功能,是Spring IOC容器的基础接口。BeanFactory容器采用延迟加载策略,即在需要使用时才加载对象
ApplicationContext:BeanFactory的子接口,提供了更丰富的功能,包括事件发布、国际化支持、AOP等。ApplicationContext容器在启动时即一次性加载所有的Bean,对于大多数应用来说,ApplicationContext是更常用的IOC容器

DI(Dependency Injection)

组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中

深入了解bean
bean的生命周期

推荐阅读:一文读懂 Spring Bean 的生命周期

bean与线程安全

Spring容器本身不提供Bean线程安全策略,需要结合具体的作用域(scope)判断是否线程安全。
Spring 的 bean 作用域(scope)类型有5种:

1、singleton:单例,默认作用域。

2、prototype:原型,每次创建一个新对象。

3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。

4、session:会话,同一个会话共享一个实例,不同会话使用不用的实例。

5、global-session:全局会话,所有会话共享一个实例。

推荐阅读:Spring的bean是怎么保证线程安全的

bean与循环依赖问题
  1. 三级缓存:
  2. 构造函数注入:
  3. 延迟初始化@Lazy:
  4. 代理模式:
  5. Setter方法注入:

推荐阅读:
[1]. 浅谈 Spring 如何解决 Bean 的循环依赖问题:结合案例和源码,分析比较详细透彻
[2]. Spring Bean循环依赖问题是如何解决的?

5.AOP(Aspect Oriented Programming)

5.1实现原理:
1).代理模式

-静态代理
-动态代理
—JDK动态代理 实现接口
—CGLIB动态代理 继承父类

2).字节码增强
5.2注解失效场景
5.3常用注解
		@Transactional(): 
		   事务传播机制
		@Order()
		@DependOn()
5.4自定义注解
5.5AOP学习推荐:

Spring AOP全面详解(超级详细)
什么是静态代理和动态代理
Java-静态代理与动态代理详解

Conclusion:

Spring&SpringBoot

参考:

[1].https://docs.spring.io/spring-framework/reference/
[2].https://javaguide.cn/system-design/framework/spring/spring-knowledge-and-questions-summary.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值