Spring源码分析-BeanFactory

65 阅读2分钟

简介

文档地址

链接地址描述
docs.spring.io/spring-fram…spring官网文档的介绍
docs.spring.io/spring-fram…api接口文档
  • BeanFactory用于访问 Spring bean 容器的根接口。BeanFactory API 为 Spring 的 IoC 功能提供了底层基础。

  • BeanFactory 和相关接口(比如 BeanFactoryAware、InitializingBean、DisposableBean)是其他框架组件的重要集成点。

接口介绍

修饰符和类型接口名称描述
booleancontainsBean(String name)bean 工厂是否包含具有给定名称的 bean 定义或外部注册的单例实例
String[]getAliases(String name)返回bean的别名
TgetBean(Class requiredType)根据给定类型返回bean的实例
TgetBean(Class requiredType, Object... args)获取bean,通过指定类型和创建时的参数
ObjectgetBean(String name)获取bean,通过bean名称
TgetBean(String name, Class requiredType)获取bean实例,通过名称和指定的类型
ObjectgetBean(String name, Object... args)获取bean实例,通过名称和创建时的参数
ObjectProvidergetBeanProvider(Class requiredType)获取bean的提供者,通过指定的类型
ObjectProvidergetBeanProvider(ResolvableType requiredType)获取bean的提供者,通过bean的可解析类型
Class<?>getType(String name)获取bean的类型,通过bean 名称
Class<?>getType(String name, boolean allowFactoryBeanInit)获取bean类型,通过名称和是否可以初始化FactoryBean
booleanisPrototype(String name)通过bean名称判断bean是否是原型模式
booleanisSingleton(String name)通过bean名称判断bean是否是单例模式
booleanisTypeMatch(String name, Class<?> typeToMatch)检查具有给定名称的 Bean 是否与指定的类型匹配
booleanisTypeMatch(String name, ResolvableType typeToMatch)检查具有给定名称的 Bean 是否与指定的类型匹配

重要继承实现类

image.png

名称描述
HierarchicalBeanFactory支持层次结构,父子级的
AutowireCapableBeanFactory支持自动装配的
ListableBeanFactory支持列表的

BeanFactory的创建

image.png

创建的是DefaultListableBeanFactory

DefaultListableBeanFactory的层级结构

image.png

image.png 来关注下DefaultListableBeanFactory中一个很重要的属性beanDefinitionMap。通过xml配置的bean,注解方式获取的bean都会包装成BeanDefinition对象注册到这个map中。

BeanDefinition

BeanDefinition 描述了一个 bean 实例,该实例具有属性值、构造函数参数值以及具体实现提供的更多信息。可以通过BeanFactoryPostProcessor修改BeanDefinition的信息。

总结

  • BeanFactory作为Spring的bean工厂,提供了生产bean能力
  • 创建DefaultListableBeanFactory为基准使用
  • 通过xml配置的bean获取注解等方式的bean都会包装成spring的内置对象BeanDefinition,再存储到DefaultListableBeanFactory中的map集合中为后续处理做准备