首页 > 其他分享 >ssm springboot

ssm springboot

时间:2023-05-11 16:58:01浏览次数:39  
标签:初始化 springboot 容器 对象 ssm Bean 处理器 加载

IOC

解析Config.class得到扫描路径

遍历路径下所有的java类,存在Component注解就存在专用map中(BeanDefinitionMap)

根据相应的规则生成BeanName为key,类作为value

核心类

BeanDefinition

  • 类型
  • 作用域
  • 懒加载
  • 初始化方法
  • 销毁方法

BeanDefinitionReader

BeanFactory

ApplicationContext

AnnotationConfigApplicationContext

ClassPathXMLApplicationContext

MessageSource 国际化

ApplicationListener 事件发布

BeanPostProcessor Bean后置处理器

FactoryBean bean的创造完全由自己,只会经过初始化后

MetadataReader ClassMetadata AnnotationMetadata 类元数据

Bean的生命周期

Bean的生成

启动applicationContext

创建Beanfactory

初始化Beanfactory

执行Beanfactory后置处理器

扫描

生成BeanDefinition

合并beandefinition

加载类

实例化前

推断构造方法

实例化

beanDefinition后置处理器

实例化后

填充属性

填充属性后

aware回调

初始化前

初始化

初始化后

Bean的销毁过程

发布ContextClosedEvent事件

调用lifecycleProcessor的onClose()方法

销毁单例Bean

  • 遍历disposableBeans
    • 把每个disposableBean从单例池中移除
    • 调用disposableBean的destroy()
    • 销毁依赖的这个disposableBean的bean
    • 销毁这个disposableBean的inner Bean
  • 清空manualSingletonNames,set集合,用户手动注册的单例Bean
  • 清空allBeanNamesByType,map集合,key是bean的类型,value是给类型所有的BeanName数组
  • 清空singletonBeanNamesByType,类似上一个,只存单例Bean

循环依赖

一级 singletonObjects 完整生命周期Bean对象

二级 eaelySingletonObjects 未经过完整生命周期的对象(aop之后的代理对象)

三级 singletonFactories 。 实例化得到一个原始对象后,基于原始对象暴露一个lambda 表达式。(当出现循环依赖时用到,可能用不到)需要Aop执行得到代理对象,不需要则得到原始对象

启动过程

构造BenaFactory对象

解析配置类,得到BeanDefinition,注册到BeanFactory

初始化MessageSource对象,支持国际化

初始化ApplicationEventMulticaster对象,支持事件机制

添加用户自定义appliecationListener到context中

创建非懒加载单例对象,存在BeanFactory单例池

调用lifecycleBean的start方法

发布contextRefreshedEvent事件

AOP

ProxyFactory 基于cglib和jdk动态代理技术封装的类。

切面 :@Aspectj注解的类,定义PointCut ,advice

连接点: 一个方法的执行

通知: 在连接点上所采取的动作

切点: 匹配一个或者多个连接点

target: 被代理对象

AOP proxy : 代理工厂

织入: 创建代理对象的动作 发生在编译器(Aspectj)和运行时(SpringAop)

事务

@EnableTransactionManagement开启spring事务

事务传播机制:是否存在事务判断Threadlocal是否存在数据库链接对象

SpringMVC请求流程

  1. 用户请求发送到前端控制器DispatcherServlet:请求拦截分发到各个控制器方法中

  2. 调用处理器映射器HandlerMapping:根据url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦 截器)一并返回给DispatcherServlet

  3. DispatcherServlet根据处理器Handler获取处理器适配器 HandlerAdapter,执行HandlerAdapter处理一系列的操作,如:参数封 装,数据格式转换,数据验证等操作

  4. 执行处理器Handler(Controller,也叫页面控制器)。

  • Handler执行完成返回ModelAndView
  • HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
  1. DispatcherServlet将ModelAndView传给ViewReslover视图解析
  • ViewReslover解析后返回具体View
  1. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)

  2. DispatcherServlet响应用户

前端控制器 映射器 适配器 处理器 模型视图 视图解析 视图渲染 响应

零配置MVC

注解方式

@WebServlet

@WebFilter

@WebListener

SPI方式

外置tomcat启动通过spi找到容器初始化类,注册上下文加载监听器和前端控制器(创建父子容器)

tomcat启动时执行上下文加载监听器和前端控制器对象的初始化方法,执行容器refresh进行加载

子容器加载时创建SpringMVC所需要的Bean和预准备的数据(通过配置类+@EnableWebMvc可扩展)

子容器注入父容器的Bean,先在子容器找,没找到去父容器

Mybatis结构

接口层

基于statement(crud)和mapper

数据处理层

参数映射(parameterHandler)

sql解析(sqlSource)

sql执行(Executer)

结果映射(ResultSetHandler)

基础支撑层

sql配置方式(xml,注解)

链接管理

事务管理

配置加载

缓存处理

mybatis启动流程

创建sqlSessionFactoryBuilder对象(属性配置,别名配置,拦截器配置,数据源,事务管理器,mapper配置等)

创建解析器

解析每一个标签保存在Configuration中

解析maper.xml(crud标签每个属性都解析出来封装成mapperstatement)

build(Configuration)

new DefaultSqlSession()

Mybatis设计模式

建造者模式 sqlsessionFactoryBuilder,XMLConfigBuilder

工厂模式 mapperProxyFactory

单例模式 logFactory,errorcontext

代理模式 MapperProxy,ConnectionLogger

组合模式 SqlNode和子ChooseSqlNode

模板方法模式 BaseExecutor

适配器模式 log接口和对其他日志框架的适配实现

装饰者模式 cache.decorators 子包中装饰者实现

迭代器模式 PropertyTokenizer

SpringBoot自动配置

@EnableAutoConfiguration

扫描加载 spring.factories 指定路径 XXXAutoConfiguration

文件中@Condition注解条件判断

starters提供配置和依赖支持

把满足条件的bean注册到spring容器中

SpringBoot启动过程

构造springApplication对象

  1. 推测web类型(根据容器中的对象实例)
  2. 构造BootstrapRegistryInitializer对象(spring容器初始化之前的容器,用来共享对象)
  3. ApplicationContextInitializer用来初始化Spring容器ApplicationContext对象
  4. 实例化扩展的ApplicationListener对象

标签:初始化,springboot,容器,对象,ssm,Bean,处理器,加载
From: https://www.cnblogs.com/ppku/p/17391560.html

相关文章

  • SpringBoot中@ControllerAdvice/@RestControlAdvice+@ExceptionHandler实现全局异常捕
    场景在编写Controller接口时,为避免接口因为未知的异常导致返回不友好的结果和提示。如果不进行全局异常捕获则需要对每个接口进行try-catch或其他操作。 可以对Controller进行全局的异常捕获和处理,一旦发生异常,则返回通用的500响应码与通用错误提示。并将异常发生的具体的......
  • springboot跨域问题解决方案
    以下内容仅供自己学习使用,侵权私聊必删。在进行前后端交互的时候,往往会遇到以下的跨域问题。那么解决这种跨域的话,可以使用以下这种方法:(引自于程序员青戈)创建config配置目录新建CorsConfig类然后把下面的内容复制进去根据自己需要修改以下就可以解决跨域问题啦importo......
  • SpringBoot整合规则引擎Drools
    目录1整合规则引擎Drools1.1前言1.2pom.xml1.3Drools配置类1.4示例Demo1.4.1添加业务Model1.4.2定义drools规则1.4.3添加Service层1.4.4添加Controller1.4.5测试1.5drools规则解析1.5.1简介1.5.2规则体语法结构1.5.3注释1.5.4Pattern模式匹配1.5.5比较操作符1.5.......
  • springboot集成springSwagger生成接口文档
    1.首先引入pom.xml依赖<!--SwaggerAPI文档--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version><exclusions><exclus......
  • java基于springboot+vue的房屋租赁租房系统、租房管理系统,附源码+数据库,免费包运行,适
    1、项目介绍java基于springboot+vue的房屋租赁租房系统、租房管理系统,分为管理员和用户。用户的功能有:登录、注册、房屋信息、交流论坛、房屋咨询、在线客服、个人中心、我的收藏、我的发布、预约看房管理、在线签约管理、租赁评价管理、管理员的功能有:登录、个人中心、用户管......
  • SpringBoot上传图片到resource下
    推荐博客:https://blog.csdn.net/weixin_52065369/article/details/120412307这样上传到resource下的图片需要重启编译后才能访问,需要配置以下才能访问的到,通常不采用这样的方式https://blog.csdn.net/qq_41604890/article/details/114553632上传图片到本机......
  • springboot自动装配过程
    一、首先要知道springboot的启动类然后知道启动类有一个重要的注解:@SpringBootApplication然后跟踪查看,它是由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan注解组成的@SpringBootConfiguration作用是声明当前类是一个组件@ComponentScan作用是扫描启......
  • springboot+Prometheus+grafana 实现自定义监控(请求数、响应时间、JVM性能)
    自定义监控1.SpringBoot工程集成Micrometer1.1引入依赖1.2配置1.3监控jvm信息1.4创建自定义监控1.5添加具体业务代码监控2.集成Prometheus2.1安装2.2集成配置3.使用GrafanaDashboard展示监控项3.1安装grafana3.2配置prometheus数据源3.3增加jvm面板3.4配置业务接口监控面板......
  • 【SpringBoot】【自动装配】 SpringBoot自动装配原理
    1 前言我们都知道SpringBoot有个自动装配的机制,那你们知道平时如何使用么,以及他是什么时候执行的么,那么本节我们就来看看。2  为什么要有自动装配我们经历过SSM时期的时候,比如要引进Redis,是不是要先要导Maven依赖,还要进行大量的配置Bean,然后才能使用,而使用SpringBoot的......
  • springboot 项目中返回前端对象错误显示是string格式
    原因是返回json对象后面跟了一段,如下图这个错误藏的比较隐蔽,有个小的对象没有实现getter方法。在返回前端对象里,所有对象都得可以序列化和反序列化,对应的对象中所有属性是否都实现getter和setter等序列化。......