BeanDefinition

BeanDefinition是Spring框架中用于描述Bean实例的核心接口,包含了Bean的类名、作用域、依赖关系、懒加载、自动注入等关键信息。在BeanDefinitionReader读取资源配置文件时,会将这些信息转化为BeanDefinition并注册到IOC容器。这个接口允许开发者精细控制Bean的行为,如设置其为单例或原型、指定依赖、标记为自动注入候选等。
摘要由CSDN通过智能技术生成

BeanDefinition

BeanDefinition介绍

BeanDefinition是一个描述了 Bean 实例,实例包含属性值、构造方法参数值以及更多实现信息接口。主要提供描述bean和修改bean的信息的一个接口对象。

一般情况下BeanDefinition对象会在BeanDefinitionReader读取资源文件时生成并注入到IOC容器中(BeanFactory,ApplicationContext)。如:XmlBeanDefinitionReader,就会读取Xml文件并将解析xml文件中的Bean的配置信息转换为BeanDefinition,并注册到XmlBeanDefinitionReader中注册的IOC容器。

BeanDefinition核心源码

这里的核心代码解读来源于:Spring(四)核心容器 - BeanDefinition 解析 - 龙四丶 - 博客园 (cnblogs.com)

这里主要解析一下BeanDefinition主要是记录了哪些描述信息:

  • bean的作用域
  • bean的父类
  • bean的依赖关系
  • bean是否懒加载
  • bean是否可以自动注入
  • bean是否为候选bean
  • bean的FactoryBean(生成该bean的工厂类)
  • bean的FactoryBean方法(生成该bean的工厂类的方法)
  • …等等
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {

	// 单例、原型标识符
	String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
	String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;

    // 标识 Bean 的类别,分别对应 用户定义的 Bean、来源于配置文件的 Bean、Spring 内部的 Bean
	int ROLE_APPLICATION = 0;
	int ROLE_SUPPORT = 1;
	int ROLE_INFRASTRUCTURE = 2;

    // 设置、返回 Bean 的父类名称
	void setParentName(@Nullable String parentName);
	String getParentName();

    // 设置、返回 Bean 的 className
	void setBeanClassName(@Nullable String beanClassName);
	String getBeanClassName();

    // 设置、返回 Bean 的作用域
	void setScope(@Nullable String scope);
	String getScope();

    // 设置、返回 Bean 是否懒加载
	void setLazyInit(boolean lazyInit);
	boolean isLazyInit();
	
	// 设置、返回当前 Bean 所依赖的其它 Bean 名称。
	void setDependsOn(@Nullable String... dependsOn);
	String[] getDependsOn();
	
	// 设置、返回 Bean 是否可以自动注入。只对 @Autowired 注解有效
	void setAutowireCandidate(boolean autowireCandidate);
	boolean isAutowireCandidate();
	
	// 设置、返回当前 Bean 是否为主要候选 Bean 。
	// 当同一个接口有多个实现类时,通过该属性来配置某个 Bean 为主候选 Bean。
	void setPrimary(boolean primary);
	boolean isPrimary();

    // 设置、返回创建该 Bean 的工厂类。
	void setFactoryBeanName(@Nullable String factoryBeanName);
	String getFactoryBeanName();
	
	// 设置、返回创建该 Bean 的工厂方法
	void setFactoryMethodName(@Nullable String factoryMethodName);
	String getFactoryMethodName();
	
	// 返回该 Bean 构造方法参数值、所有属性
	ConstructorArgumentValues getConstructorArgumentValues();
	MutablePropertyValues getPropertyValues();

    // 返回该 Bean 是否是单例、是否是非单例、是否是抽象的
	boolean isSingleton();
	boolean isPrototype();
	boolean isAbstract();

    // 返回 Bean 的类别。类别对应上面的三个属性值。
	int getRole();

    ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值