一:什么是BeanDefinition?为什么需要BeanDefinition?
BeanDefinition是一个描述Bean定义的顶层接口。例如Bean是单例还是多例、Bean对象的全类名、Bean是否是懒加载、创建对象需要的属性值等等信息。
但是我们为什么需要BeanDefinition这个顶层接口呢?
因为Bean定义的来源有xml配置文件、java配置类,在springboot时还增加了yml文件。这么一看以后可能还会增加其他定义Bean对象的方式。因此spring的对象工厂也不可能为每一种定义对象方式都去开发一套创建对象的技术。所以spring的开发者就抽象出BeanDefinition这样的顶层规范接口,对象工厂只需要根据BeanDefinition对象里的信息去创建对象。
二:详细介绍BeanDefinition接口
public interface BeanDefinition {
/**
* 单例字符串singleton
*/
String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
/**
* 原型字符串prototype
*/
String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
/**
* 用户自定义bean的角色类型
*/
int ROLE_APPLICATION = 0;
/**
* 某些复杂的配置类
*/
int ROLE_SUPPORT = 1;
/**
* spring内部使用的bean角色
*/
int ROLE_INFRASTRUCTURE = 2;
/**
* 设置父亲对象的名称。注意不能和java里的父类名称混为一谈。
*/
void setParentName(@Nullable String parentName);
String getParentName();
/**
* 设置bean对象的类名称
*/
void