答:BeanDefinition是Spring里面的最小化接口,允许Spring通过BeanPostProcessor后置处理器去修改属性值和其他bean的元数据等。
Spring是通过BeanDefinition的实现类去创建Bean对象,官方推荐,默认使用的是GenericBeanDefinition。
其里面核心的属性有:beanClassName类的路径名称,scope作用域,abstract是否抽象类,factoryBeanName、factoryMethodName工厂bean,创建本bean的方法
String[] dependsOn,本bean所依赖bean的beanName数组,primary(boolean),当有好几个bean被一个bean依赖注入,本bean是头号种子选手,当AutowiredCandidate(boolean)
false的话就是没有资格被别人注入。ConstructorAgumentValues,和MutablePropertyValues,一个是构造器注入, 另外一个是set方法注入。
延伸:
BeanDefinition是一个最小化的接口,非抽象的实现类有三个
RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition
RootBeanDefinition 跟@Configuration注解有关
ChildBeanDefinition 从2.5以后就被GenericBeanDefinition给替代了
是因为GenericBeanDefinition可以动态去设置parentName属性,预先定义parent/child太死了。