Spring | BeanDefinition里面存放的究竟是什么?
BeanDefinition
在Spring框架中是一个非常核心的数据结构,它主要用来存储和描述一个Bean的配置元数据。当Spring容器启动时,它会解析配置元数据(如XML配置文件、Java配置类或注解),并将这些信息转换成一系列BeanDefinition
对象。这些对象包含了创建和管理Bean所需的所有信息
BeanDefinition
主要存放一下几类信息:
- Bean的类信息(beanClass):这是Bean所对应的Java类的Class对象,提示Spring容器应该实例化那个具体的类
- 构造方法参数(constructorArgumentValues):包含了Bean构造方法的参数值,以及参数的来源(如引用其他Bean、字面量值等)
- 属性值(propertyValues):包含了Bean的属性及其值,这些值可以是其他Bean的引用、字面量值、表达式等
- 作用域(scope):定义了Bean的生命周期和可见性,如singleton(单例)、prototype(原型)、request(每一个HTTP请求一个实例)等
- 依赖信息:指示了Bean依赖的其他Bean,Spring容器会确保在创建Bean前先创建并注入其依赖
- 初始化和销毁方法(initMethodName, destroyMethodName):指定了Bean的初始化和销毁时应调用的方法
- 懒加载(lazyInit):表示Bean是否在第一次请求时才实例化,对于Prototype作用域的Bean通常是默认的,但对于Singleton作用域的Bean,则需要显示设置
- FactoryBean信息(factoryBeanName, factoryMethodName):如果Bean是由另一个Bean(FactoryBean)创建的,这里会包含FactoryBean的名称和用于创建Bean的方法名
- 资源描述符(resourceDescription):描述了Bean定义的来源,如XML文件的位置或Java配置类的名称
10.依赖检查(dependencyCheck):控制是否在Bean初始化时进行依赖检查
11.自动装配模式(autowireMode):指定Bean的依赖如何自动装配,如byName(按名称)、byType(按类型)等
12.Autowire候选者(autowireCandidate):指示Bean是否可以作为自动装配的候选者
13.主Bean(primary):标记Bean是否是相同类型的Bean中的首选
14.依赖查找(dependsOn): 指定Bean依赖于那些其他Bean的初始化