BeanDefinition基本定义
BeanDefinition定义了Bean的基本元信息、生命周期方法等。描述了Spring Bean的基本信息。其初始化方法主要有以下两种方式:
本文案例也是基于Spring Framework 5.2.2.RELEASE版本,基础依赖详见Spring依赖查找
1. BeanDefinitionBuilder初始化
BeanDefinitionBuilder提供了几个静态方法创建BeanDefinition,一种是顶层形式的BeanDefinition,一种是普通的BeanDefinition,一种是子类的BeanDefinition。
下述创建一个普通的BeanDefinition:
User对象如下:
public class User {
private Long id;
private String name;
// Get、Set方法略
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
创建BeanDefinition的测试类如下:
public class BeanDefinitionCreatorDemo {
public static void main(String[] args) {
createByBeanDefinitionBuilder();
}
private static void createByBeanDefinitionBuilder() {
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
beanDefinitionBuilder.addPropertyValue("id", 1);
beanDefinitionBuilder.addPropertyValue("name", "Michael");
BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
System.out.println(beanDefinition);
}
}
上述创建方式等价于xml中的如下配置:
<bean id="user" class="com.vielat.spring.ioc.domain.User">
<property name="id" value="1" />
<property name="name" value="Michael" />
</bean>
2. 直接初始化AbstractBeanDefinition
AbstractBeanDefinition有几个具体的实现类,可以分别实例化上述三类BeanDefinition,如下:
private static void createBeanDefinition() {
AbstractBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(User.class);
MutablePropertyValues mutablePropertyValues = new MutablePropertyValues();
mutablePropertyValues.addPropertyValue("id", 1);
mutablePropertyValues.addPropertyValue("name", "Michael");
beanDefinition.setPropertyValues(mutablePropertyValues);
System.out.println(beanDefinition);
}
上述BeanDefinition对象创建后,不是对象的终态,可以手动进行调整。