Spring源码分析图
2019-08-05 10:25:44   7  举报             
     
         
 Spring核心原理分析图
    作者其他创作
 大纲/内容
 返回AopProxy
  loadBeanDefinitions
  BeanDefinitionReaderUtils
  DispatcherServlet
  HandlerInterceptor
  doDispatch
  new DefaultListableBeanFactory
  在web.xml文件中配置一个DispatcherServlet,作为SpringMVC的启动入口
  render
  DefaultListableBeanFactory
  proceed
  AbstractHandlerMapping
  Core
  invoke
  SimpleInstantiationStrategy
  getInterceptorsAndDynamicInterceptionAdvice
  3
  createBeanDefinition
  Test
  processDispatchResult
  4
  BeanWrapperImpl
  依赖注入
  Web
  getHandler
  p style=\
  AOP流程图
  XmlBeanDefinitionReader
  postProcessXml
  instantiateBean
  init方法
  AbstractApplicationContext
  实例化Bean
    getHandlerAdapter
  Data Access/Integration
  调用具体方法
  createBeanFactory
  refreshBeanFactory
  cancelRefresh取消refresh()操作
  initStrategy
  postHandler
  doLoadBeanDefinitions
  getModelAndView
  doService
  配置一个请求路径的规则,通常会配置成/*
  5
  得到一个Bean
  setConfigLocations()
  RequestMappgingHandlerAdapter
  getHandlerExecutionChain
  getProxy
  beanDefinitionMap
  processBeanDefinitionElement
  createProxy
  定位配置文件,读取用简单的properties代替
  调用阶段
  AbstractAutowireCapableBeanFactory
  1. createBeanInstance生成Bean所包含的Java实例对象
  initWebApplicationContext
  getBean
  OXM
  doRegisterBeanDefinitions
  registerBeanDefinitions
  Core Container
  postProcessAfterInitialization
  resolveValueIfNecessary
  SpringMVC
  ViewResolver
  Instument
  setValue
  Beans
  Messaging
  BeanFactory:主语是Factory(顶层接口)。    用来创建工厂的模型,是所有Bean工厂要实现的接口。具体工厂会通过策略模式去实现,不同的工厂生产不同的产品。    主要方法是getBean(xxx)、getType(xxx)FactoryBean:主语是Bean。所有的工厂生产的产品都要实现这个接口。   简言之:BeanFactory生产出的产品都是FactoryBean。    主要方法是getObject()、getObjectType()大部分情况下BeanFactory本身也是通过BeanFactory创建的,也就是说BeanFactory也是一个FactoryBean。如果在beanName前面加了一个&,则表示是一个工厂,而且这个工厂是由BeanFactory创建出来的。&只是一个字符串,没有具体的含义。由Spring内部使用。
  WebFlux
  HttpServletBean
  IoC初始化流程图(定位、加载、注册)span style=\"font-size: 13px; font-weight: normal;\
  注册
  preProcessXml
  JDBC
  HandlerMapping
  Controller
  initServletBean
  触发通知
  init
  createBean
  initializeBean
  转换属性值,将引用转换为IOC容器中实例化对象引用
  AbstractRefreshableApplicationContext
  AbstractBeanFactory
  BeanDefinitionValueResolver
  wrapIfNecessary
  1.寻找入口调用父类的构造函数,设置资源加载器2.获得配置路径将配置的Bean配置信息定位为Spring封装的Resource3.开始启动调用refresh()方法,对Bean配置资源进行载入。
  BeanFactory
  6
  Transactions
  配置阶段
  AbstractBeanDefinitionReader
  refresh()
  preHandler
  不考虑延时加载情况,直接赋值根据注解配置来赋值
  applyBeanPostProcessorsAfterInitialization
  IOC容器,BeanDefinition这里直接存原始Bean
  BeanDefinitionParserDelegate
  handler
  BeanWrpper.setPropertyValues
  WebMVC
  配置servlet-pattern
  2
  onRefresh
  WebSocket
  doGetBean
  AOP
  AbstractXmlApplicationContext
  创建代理对象
  instantiate
  web.xml
  Context
  1. Requset
  parseBeanDefinitions
  初始化阶段
  Aspects
  固定属性名字contextConfigLocation,指定application.xml路径通常会配置成classpath:application.xml
  ModelAndView
  registerBeanDefinition
  ClassPathXmlApplicationContext
  JMS
  doCompare
  View
  2. populateBean将实例Bean对象封装
  doCreateBean
  Spring MVC流程图
  Expression
  BeanDefinition相当于保存在内存中的配置文件,保存了所有的跟类属性相关信息依赖注入就是把BeanDefinition中的信息读取出来,利用反射机制,或者代理机制创建对象。新创建的对象,不会放到我们印象中的IOC容器中,它存入到另外一个cache容器中。Wrapper是对原生对象的包装,通过构造方法存储原始对象,放入cache的只是Wrapper(包装器模式)。目的是减少代码侵入,能够在原生的基础上,再进行扩展(监听器,回调函数,标记信息),实现高可扩展。(面试题,Spring中的Bean是不是线程安全的?原来什么样就什么样,Spring不会对对象进行修改)getBean什么时候调用的?什么时候完成自动注入的?
  DefaultBeanDefinitionDocumentReader
  destroyBeans销毁已创建的Bean
  findEligibleAdvisors
  ORM
  定位
  applyPropertyValues
  DI依赖注入流程图
  3. initializeBean 开始AOP的流程
  加载
  请求处理阶段
  开始跟配置文件扫描加载需要实例化的类,并且保存到IOC容器中
  createAopProxy
  AbstractNestablePropertyAccessor
  配置init-param
  AbstractPropertyAccessor
  processBeanDefinitions
  getAdvicesAndAdvisorsForBean
  AbstractRefreshConfigApplicationContext
  FramewokServlet
  setPropertyValue
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
  
  
  
  
  
  
  
  
 