BeanDefinition是在Spring 容器创建过程中用来描述Bean的一个对象,包含了Bean属性值、构造函数值以及一些其他定义的信息,
在容器创建之后,按照加载的BeanDefinition对象去创建相应的Bean。
1、BeanDefinition 描述的内容
从基础的 BeanDefinition 接口中提供的方法来看,一个BeanDefinition 有以下行为,大部分方法都是为了构建Bean的描述的,由此也能看出一个Bean应该具有哪些特征:
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
// 设置父级BeanDefinition的名字,由此可知一个Bean定义对象支持关联一个父级的定义对象
void setParentName(@Nullable String parentName);
// 设置要定义Bean的类名
void setBeanClassName(@Nullable String beanClassName);
// 设置要定义Bean的作用域,即我们熟知的singleton、prototype等等
void setScope(@Nullable String scope);
// 设置要定义Bean是否延迟初始化(懒加载)
void setLazyInit(boolean lazyInit);
// 设置该Bean要依赖的其他Bean名称,这些Bean将优先初始化
void setDependsOn(@Nullable String... dependsOn);
// 设置该Bean是否自动装配到其他Bean中,仅影响按类型装配
void setAutowireCandidate(boolean autowireCandidate);
// 设置Bean初始化方法
void setInitMethodName(@Nullable String initMethodName);
// 设置Bean销毁方法
void setDestroyMethodName(@Nullable String destroyMethodName);