Spring设计模式
- 简单工厂
- 工厂方法:FactoryBean接口。
- 单例模式
- 适配器模式:SpringMVC中的适配器HandlerAdatper,HandlerAdatper根据Handler规则执行不同的Handler
- 装饰器模式:Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。
- 代理模式:AOP
- 观察者模式:spring的事件驱动模型使用的是 观察者模式 ,Spring中Observer模式常用的地方是listener的实现。
- 策略模式:Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。
- 模板方法模式:各种Template接口
Bean生命周期
Spring事务的传播机制 Spring事务的传播机制有以下7种类型:
-
REQUIRED REQUIRED是默认的传播机制。如果当前方法已经有了一个事务,那么调用方法将在该事务中执行;如果当前方法没有事务,那么调用方法将开启一个新的事务。
-
SUPPORTS SUPPORTS表示当前方法支持事务,但是如果调用方法没有事务,那么当前方法不会开启事务。
-
MANDATORY MANDATORY表示当前方法必须在一个事务中执行,如果调用方法没有事务,那么将会抛出异常。
-
REQUIRES_NEW REQUIRES_NEW表示当前方法必须开启一个新的事务,如果调用方法已经有了一个事务,那么该事务将被挂起,当前方法将在新的事务中执行。
-
NOT_SUPPORTED NOT_SUPPORTED表示当前方法不应该在事务中执行,如果调用方法有事务,那么该事务将被挂起,当前方法将在没有事务的上下文中执行。
-
NEVER NEVER表示当前方法不应该在事务中执行,如果调用方法有事务,那么将会抛出异常。
-
NESTED NESTED表示当前方法将在一个嵌套的事务中执行,如果调用方法已经有了一个事务,那么当前方法将嵌套在该事务中执行;如果调用方法没有事务,那么当前方法将开启一个新的事务。
Spring Boot Spring Boot启动流程
核心配置文件
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.将渲染结果返回给客户端。