Spring&SpringBoot专题
【注】:
本专题围绕框架核心概念展开,渐进式深入总结学习、面试、开发经验,集中整理便于回顾
持续补充与施工中~~~~
1.发展史
2.基本架构
Spring框架的基本架构是一个分层架构,包括多个模块,每个模块都有不同的职责。以下是Spring框架的基本架构组成:(Spring 5.x)
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.3Spring MVC请求处理流程:
- 客户端发送HTTP请求至DispatcherServlet。
- DispatcherServlet根据HandlerMapping找到匹配的Controller。
- Controller处理请求,调用服务层(Service)处理业务逻辑。
- Controller将模型数据封装在ModelAndView中,并返回。
- DispatcherServlet选择适当的ViewResolver,将逻辑视图名解析为具体的视图。
- 视图负责渲染模型数据,生成最终的响应。
- DispatcherServlet将响应返回给客户端。
Spring MVC通过上述机制实现了一个清晰、灵活的Web开发框架,支持多种视图技术(JSP、Thymeleaf等),并提供了强大的拓展能力,使得开发者可以根据项目需求灵活选择不同的组件和技术。
4.IOC
IOC容器:
BeanFactory: Spring框架最基本的IOC容器,提供了基本的IOC功能,是Spring IOC容器的基础接口。BeanFactory容器采用延迟加载策略,即在需要使用时才加载对象
ApplicationContext:BeanFactory的子接口,提供了更丰富的功能,包括事件发布、国际化支持、AOP等。ApplicationContext容器在启动时即一次性加载所有的Bean,对于大多数应用来说,ApplicationContext是更常用的IOC容器
DI(Dependency Injection)
bean的生命周期*
bean 循环依赖问题
- 三级缓存:
- 构造函数注入:
- 延迟初始化@Lazy:
- 代理模式:
- Setter方法注入:
5.AOP
5.1实现原理:
1).代理模式
2).字节码增强
5.2注解失效场景
6.源码学习与解读
6.1注解
Transactional:
6.2.设计模式
参考:
[1].https://docs.spring.io/spring-framework/reference/
[2].https://javaguide.cn/system-design/framework/spring/spring-knowledge-and-questions-summary.html