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 源码系列暂定
追更,可扫下面的二维码,分享纯粹为了乐趣,也有一种成就感吧,笔者这篇文章先就到这