zoukankan      html  css  js  c++  java
  • spring源码相关第一篇----------------------------spring bean定义解析

    一切都要从容器的创建开始,无论什么结合方法实现的都是先创建一个容器,而容器的创建大致可以分为xml方式,注解方式实现的容器,而其根容器通常为beanFactory

     这是一种经典的xml的创建方式,其它xml的创建方式不在做细分。

     这是注解方式实现的spring ioc容器的创建操作。

    ------------------------------------------------------以上为两大类实现ioc容器的方式

    无论哪种方式创建的ioc容器,最终都会走到如图所示的refresh方法,这个方法为ioc容器的创建的核心方法,spring源码解析操作,大部分也都是围绕这个方法进行描述。

     注意这里的两个方法实现的是对于的类的解析操作,生成对应的beanDefinition,之后将beanDefinition放入到beanFactory实例的beanDefinitionMap中。

    而这里配置相关的beandefinition的是在执行refresh方法执行执行的,放入到beanDefintionMap中的

    注意到这里的方法主要用于配置类相关的解析操作,对于其配置类上的@ComponentScan,@Scan进行相应的解析操作,同将对应条件之下bean创建成beanDefinition之后放入beanDefinitionMap中

    到此beanDefinition创建完成,也就是完成bean创建对象的必要的第一步工作。

     

    注意到这个方法,是将beanDefinitionMap中的实例拿出来进行逐个解析并实例化创建对象(代理对象,或者bean对象),完成ioc容器的bean所有的创建工作。

    注意到这里的doGetBean方法,正是这个方法完成了bean对象的创建工作,并将其创建成功bean对象(可能是代理对象,aop的实现也是存在于此处,请看aop解析相关博客)放入到singletonObjects中。

    beanPostProcessor主要用于完成属性的注入操作,此处正式aop实现之处,详细情况spring 源码解析,aop相关解析

    -----------------------------------------------------到此bean算是创建完成,之后随的ioc容器的销毁,bean对象也随即销毁。

    其它附加信息

      

     

  • 相关阅读:
    Git
    Qcon2016上海站PPT
    TeamCity
    在cmd界面,怎么样退出Node.js运行环境
    python 2.x与python3.x的区别
    d3.max()与d3.min()
    d3.svg.line() 曲线构造器
    d3.js 之SVG:矢量化图形绘制
    moment.js 时间格式化库
    directive
  • 原文地址:https://www.cnblogs.com/chaojibaidu/p/14964272.html
Copyright © 2011-2022 走看看