Spring的BeanFactory是什么? (3)

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<String, Object> getAnnotationAttributes(String annotationName, boolean classValuesAsString) { //遍历元数据中的所有注解 MergedAnnotation<Annotation> annotation = getAnnotations().get(annotationName, null, MergedAnnotationSelectors.firstDirectlyDeclared()); //不存在则返回null,否则返回一个map if (!annotation.isPresent()) { return null; } return annotation.asAnnotationAttributes(Adapt.values(classValuesAsString, true)); }

以上为扫描@Component注解类进行解析元数据填充属性的逻辑,在配置类中以@Bean方式注册的BeanDefinition填充属性过程在ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(configClasses)

BeanFactory生产Bean的过程是怎样的?

现在,我们已经知道了一个BeanDefinition的具体结构以及是如何产生并注册到BeanFactory的,那么BeanFactory又是如何使用它生产Bean的呢?以下附上createBean的粗略流程图,具体细节将放在IOC容器启动流程中详细说明

在这里插入图片描述

那么关于BeanFactory的相关内容就到这里了,希望大家有所收获,下篇将正式进入Spring IOC容器的启动流程!

准备花个30天时间,系统的来整理一下我对spring源码的认识:

Spring 源码系列

Spring源码分析之 IOC 容器预启动流程(已完结)

Spring源码分析之BeanFactory体系结构(已完结)

Spring源码分析之BeanFactoryPostProcessor调用过程(已完结)

Spring源码分析之Bean的创建过程

Spring源码分析之什么是循环依赖及解决方案

Spring源码分析之AOP从解析到调用

Spring源码分析之事务管理(上),事物管理是spring作为容器的一个特点,总结一下他的基本实现与原理吧

Spring源码分析之事务管理(下) ,关于他的底层事物隔离与事物传播原理,重点分析一下

Spring Mvc 源码系列

SpringMvc体系结构

SpringMvc源码分析之Handler解析过程

SpringMvc源码分析之请求链过程

Mybatis 源码系列

暂定

追更,可扫下面的二维码,分享纯粹为了乐趣,也有一种成就感吧,笔者这篇文章先就到这

在这里插入图片描述

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjpp.html