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的相关内容就到这里了 , 希望大家有所收获 , 下篇将正式进入BeanFactoryPostProcessor容器的启动流程!
【BeanFactory体系结构探析】准备花个30天时间 , 系统地来整理一下我对spring源码的认识:
Spring 源码系列
- Spring源码分析之 IOC 容器预启动流程(已完结)
- Spring源码分析之BeanFactory体系结构(已完结)
- Spring源码分析之BeanFactoryPostProcessor调用过程(已完结)
- Spring源码分析之Bean的创建过程
- Spring源码分析之什么是循环依赖及解决方案
- Spring源码分析之AOP从解析到调用
- Spring源码分析之事务管理(上) , 事物管理是spring作为容器的一个特点 , 总结一下他的基本实现与原理吧
- Spring源码分析之事务管理(下), 关于他的底层事物隔离与事物传播原理 , 重点分析一下
- SpringMvc体系结构
- SpringMvc源码分析之Handler解析过程
- SpringMvc源码分析之请求链过程
- 智能建筑弱电系统的应用与发展探析
- 设计|探析“网红”手机背后的秘密,为了受欢迎vivo S7e只做了这两点
- 彭波在《现代传播》撰文:我国消弭数字鸿沟的新机遇与新路径探析
- Gartner|Gartner发布,探析2021年九大技术趋势在保险行业应用
- Gartner发布,探析2021年九大技术趋势在保险行业应用
- 理解透彻!BeanFactory与FactoryBean分析