BeanFactory体系结构探析( 三 )

attributesFor(metadata, Lazy.class)
static AnnotationAttributes attributesFor(AnnotatedTypeMetadata metadata, Class annotationClass) {return attributesFor(metadata, annotationClass.getName());}static AnnotationAttributes attributesFor(AnnotatedTypeMetadata metadata, String annotationClassName) {//metadata为beanClass的注解元数据 , 存放了该类所配置的所有注解//annotationClassName为需要寻找的注解名称return AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(annotationClassName, false));}default Map getAnnotationAttributes(String annotationName,boolean classValuesAsString) {//遍历元数据中的所有注解MergedAnnotation annotation = getAnnotations().get(annotationName,null, MergedAnnotationSelectors.firstDirectlyDeclared());//不存在则返回null,否则返回一个mapif (!annotation.isPresent()) {return null;}return annotation.asAnnotationAttributes(Adapt.values(classValuesAsString, true));}12345678910111213141516171819以上为扫描@Component注解类进行解析元数据填充属性的逻辑 , 在配置类中以@Bean方式注册的BeanDefinition填充属性过程在ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(configClasses)
BeanFactory生产Bean的过程是怎样的?现在 , 我们已经知道了一个BeanDefinition的具体结构以及是如何产生并注册到BeanFactory的 , 那么BeanFactory又是如何使用它生产Bean的呢?以下附上createBean的粗略流程图 , 具体细节将放在IOC容器启动流程中详细说明
BeanFactory体系结构探析文章插图
那么关于BeanFactory的相关内容就到这里了 , 希望大家有所收获 , 下篇将正式进入BeanFactoryPostProcessor容器的启动流程!
【BeanFactory体系结构探析】准备花个30天时间 , 系统地来整理一下我对spring源码的认识:
Spring 源码系列

  1. Spring源码分析之 IOC 容器预启动流程(已完结)
  2. Spring源码分析之BeanFactory体系结构(已完结)
  3. Spring源码分析之BeanFactoryPostProcessor调用过程(已完结)
  4. Spring源码分析之Bean的创建过程
  5. Spring源码分析之什么是循环依赖及解决方案
  6. Spring源码分析之AOP从解析到调用
  7. Spring源码分析之事务管理(上) , 事物管理是spring作为容器的一个特点 , 总结一下他的基本实现与原理吧
  8. Spring源码分析之事务管理(下), 关于他的底层事物隔离与事物传播原理 , 重点分析一下
Spring Mvc 源码系列
  1. SpringMvc体系结构
  2. SpringMvc源码分析之Handler解析过程
  3. SpringMvc源码分析之请求链过程