Spring 上一篇文章中已介绍了Bean 的定义,什么是BeanDefinition?下面主要源码结合模式分析BeanDefinition元信息「Bean的配置元信息」
下面罗列了BeanDefinition元信息配置
上面一表格形式概括说明BeanDefinition元信息配置,不是所有的属性配置都是必须的,但是前面几个参数属性是必须的
附加补充说明
如何构建BeanDefinition?
注意细节⚠️
BeanDefinitionBuilder提供了两种方式获取BeanDefinitionBuilder
// 普通方式获取,非根的Bean,可以有父类
BeanDefinitionBuilder#genericBeanDefinition
// 根节点获取,只能获取根节点Bean即最顶层Bean
BeanDefinitionBuilder#rootBeanDefinition
实例
public class BeanDefinitionCreationDemo {
public static void main(String[] args) {
// 1.通过BeanDefinitionBuilder 构建
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
// 通过属性配置
beanDefinitionBuilder.addPropertyValue("id", 1);
beanDefinitionBuilder.addPropertyValue("name", "小码哥");
// 获取BeanDefinition 实例
BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
// BeanDefinition 并非 Bean 终态,可以自定义修改
// 2. 通过 AbstractBeanDefinition 以及派生类
GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
// 设置Bean 类型
genericBeanDefinition.setBeanClass(User.class);
// 通过MutablePropertyValues 批量操作属性
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues
.add("id", 1)
.add("name","小码哥");
// 通过 set MutablePropertyValues 批量操作属性
genericBeanDefinition.setPropertyValues(propertyValues);
}
}
BeanDefinitionBuilder#addPropertyValue
/**
* Add the supplied property value under the given property name.
*/
public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value) {
this.beanDefinition.getPropertyValues().add(name, value);
return this;
}