(1) BeanDefinition元信息
属性(Property) | 说明 |
Class | Bean全类名,必须是具体类,不能用抽象类或者是接口 |
Name | Bean的名称或者是ID |
Scope | Bean的作用域(如:singleton、prototype等) |
Constructor arguments | Bean 构造器参数(用于依赖注入) |
Properties | Bean属性设置(用于依赖注入) |
Autowiring mode | Bean 自动绑定模式(如:通过名称byName) |
Lazy initialization mode | Bean 延迟初始化模式(延迟和非延迟) |
Initialization method | Bean 初始化回调方法名称 |
Destruction method | Bean 销毁回调方法名称 |
(2)BeanDefinition构建
- 通过BeanDefinitionBuilder
- 通过AbstractBeanDefinition以及派生类
package org.binsoft.thinking.in.spring.bean.definition;
import org.binsoft.thinking.in.spring.ioc.overview.domain.User;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.GenericBeanDefinition;
/**
* {@link org.springframework.beans.factory.config.BeanDefinition} 构建示例
*
* @author Administrator
* @version 1.0
* @date 2021/1/3 14:38
*/
public class BeanDefinitionCreationDemo {
public static void main(String[] args) {
//1、通过 BeanDefinitionBuilder构建
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
//通过属性设置
beanDefinitionBuilder.addPropertyValue("id",1).addPropertyValue("name","彬少");
//获取 BeanDefinition 实例
BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
System.out.println("BeanDefinition:" + beanDefinition);
//BeanDefinition 并非 Bean 终态,可以自定义修改
//2、通过 AbstractBeanDefinition 以及派生类
GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
// 设置 Bean 类型
genericBeanDefinition.setBeanClass(User.class);
//通过MutablePropertyValues 批量设置属性
MutablePropertyValues propertyValues = new MutablePropertyValues();
//propertyValues.addPropertyValue("1",1);
//propertyValues.addPropertyValue("name","彬少");
propertyValues.add("id",1).add("name","彬少");
genericBeanDefinition.setPropertyValues(propertyValues);
System.out.println("GenericBeanDefinition:" + genericBeanDefinition);
}
}