Spring相关

56 阅读5分钟

Spring设计模式

  • 简单工厂
  • 工厂方法:FactoryBean接口。
  • 单例模式
  • 适配器模式:SpringMVC中的适配器HandlerAdatper,HandlerAdatper根据Handler规则执行不同的Handler
  • 装饰器模式:Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。
  • 代理模式:AOP
  • 观察者模式:spring的事件驱动模型使用的是 观察者模式 ,Spring中Observer模式常用的地方是listener的实现。
  • 策略模式:Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。
  • 模板方法模式:各种Template接口

Bean生命周期 image.png

Spring事务的传播机制 Spring事务的传播机制有以下7种类型:

  1. REQUIRED REQUIRED是默认的传播机制。如果当前方法已经有了一个事务,那么调用方法将在该事务中执行;如果当前方法没有事务,那么调用方法将开启一个新的事务。

  2. SUPPORTS SUPPORTS表示当前方法支持事务,但是如果调用方法没有事务,那么当前方法不会开启事务。

  3. MANDATORY MANDATORY表示当前方法必须在一个事务中执行,如果调用方法没有事务,那么将会抛出异常。

  4. REQUIRES_NEW REQUIRES_NEW表示当前方法必须开启一个新的事务,如果调用方法已经有了一个事务,那么该事务将被挂起,当前方法将在新的事务中执行。

  5. NOT_SUPPORTED NOT_SUPPORTED表示当前方法不应该在事务中执行,如果调用方法有事务,那么该事务将被挂起,当前方法将在没有事务的上下文中执行。

  6. NEVER NEVER表示当前方法不应该在事务中执行,如果调用方法有事务,那么将会抛出异常。

  7. NESTED NESTED表示当前方法将在一个嵌套的事务中执行,如果调用方法已经有了一个事务,那么当前方法将嵌套在该事务中执行;如果调用方法没有事务,那么当前方法将开启一个新的事务。

Spring Boot Spring Boot启动流程

image.png

核心配置文件

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有三个应用场景。

使用Spring Cloud Config配置中心时,需要在 bootstrap 配置文件中添加连接到配置中心的配置属性,来加载外部配置中心的配置信息;

一些固定的不能被覆盖的属性;

一些加密或解密的场景;

(bootstrap比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效, 而且boostrap 里面的属性不能被覆盖;application用于 spring boot 项目的自动化配置)

Spring Boot 特性

  • 独立的spring应用
  • 嵌入Tomcat、Jetty或Undertow等Web容器
  • 固化starter依赖
  • 自动装配
  • 提供运维(Production-ready)特性,如指标信息(Metrics)、监控检查及外部配置
  • 无代码生成,并且不需要XML配置

什么是Spring Boot Starter?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring 和其他技术,而不需要到处找示例代码和依赖包。Spring Boot Starter的工作原理是:Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context

核心注解

Spring Boot 的核心注解是@SpringBootApplication,它也是启动类使用的注解,主要包含了 3 个注解:

@SpringBootConfiguration:它组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:具有打开自动配置的功能,也可以关闭某个自动配置的选项。

@ComponentScan:用于Spring组件扫描。

自动配置原理

Spring MVC请求处理流程

1.用户向服务器发送请求,请求被Spring前端控制Servlet DispatcherServlet捕获;

2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3.DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。(如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);

4.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler入参的过程中,根据你的配置,Spring帮你完成如下工作:

  HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

  数据转换:对请求消息进行数据转化。如String转化成Integer、Double等;

  数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。

5.Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象;

6.根据返回的ModelAndView,选择一个合适的ViewResolver返回给DispatcherServlet;

7.ViewResolver结合Model和View,来渲染视图;

8.将渲染结果返回给客户端。