无聊看看了spring的源码,并画了uml图。

spring执行流程:
1: 加载spring.xml文件
2: 创建xml文件解析器 
3: 获取命名空间,即在spring.xml文件中的 http://www.springframework.org/schema/context
4: 根据命名空间找到命名空间处理器,在命名空间处理器中包含多个属性解析器:
{annotation-config=org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser@21cdca84, mbean-server=org.springframework.context.config.MBeanServerBeanDefinitionParser@4daab172, spring-configured=org.springframework.context.config.SpringConfiguredBeanDefinitionParser@167db34, property-placeholder=org.springframework.context.config.PropertyPlaceholderBeanDefinitionParser@496833a4, load-time-weaver=org.springframework.context.config.LoadTimeWeaverBeanDefinitionParser@581679a2, component-scan=org.springframework.context.annotation.ComponentScanBeanDefinitionParser@2b8ba7dc, property-override=org.springframework.context.config.PropertyOverrideBeanDefinitionParser@5db972d9, mbean-export=org.springframework.context.config.MBeanExportBeanDefinitionParser@3a2334a1
}
         omponent-scan />  每一个 这样的标签都会对应一个解析器
         
         
         
         
         
         
         

5: 根据处理器 获得 标签 解析器 ComponentScanBeanDefinitionParser

6:ComponentScanBeanDefinitionParser解析器开始解析调用Parse 方法

7:根据 中的扫描路径进行处理,并加载class文件信息

8:利用ASM技术去解读class文件获得class中的信息,spring提供了一些ASM类例如:
import org.springframework.asm.AnnotationVisitor; //查看class文件有哪些注解
import org.springframework.asm.Attribute;         //查看class文件有哪些属性
import org.springframework.asm.ClassVisitor;      //
import org.springframework.asm.FieldVisitor;      //查看class文件有哪些字段
import org.springframework.asm.MethodVisitor;      //查看class文件有哪些方法
import org.springframework.asm.Opcodes;
import org.springframework.asm.SpringAsmInfo;

9:解析完class文件生成beandefinition 对象,beandefinition对象是对bean 定义描述,例如,创建bean的策略,初始方法,等等。

10:最后根据beandefinition 生成 bean对象,放入 spring容器中,spring容器是一个ConcurrentHashMap

以上是spring的大体流程,下面是我跟踪spring源码所画的springUML图:长卷图

无聊看看了spring的源码,并画了uml图。_第1张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(spring)