BeanDefinition学习

Spring版本5.1.x

Spring中的BeanDefinition是一个接口,用于描述Spring容器中Bean的元数据。BeanDefinition描述了Bean的各种属性,如名称、依赖关系、初始化方法等。这个接口通常用于在Spring的IoC容器中注册Bean,并且当容器需要创建Bean实例时,会使用这些BeanDefinition来获取Bean的属性和依赖关系。

BeanDefinition的主要作用是:

  1. 描述Bean的属性和依赖关系:BeanDefinition可以定义一个Bean的属性和依赖关系,Spring容器会根据这些信息来创建Bean实例,并且注入相应的依赖。
  2. 注册Bean到Spring容器中:在Spring应用中,我们通常会将Bean的定义注册到Spring容器中,这样容器就可以管理这些Bean的生命周期。BeanDefinition就是用于描述Bean的元数据,从而将Bean注册到Spring容器中。
  3. 实现依赖注入:通过使用BeanDefinition,Spring容器可以自动识别和注入Bean之间的依赖关系。当容器需要创建一个Bean实例时,它会根据BeanDefinition中的信息来获取依赖关系,并且自动注入相应的Bean实例。
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {

	/**
	 * @see #setScope bean 作用域 单例
	 */
	String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;

	/**
	 * @see #setScope bean 作用域 原型
	 */
	String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;

	int ROLE_APPLICATION = 0;

	int ROLE_SUPPORT = 1;

	int ROLE_INFRASTRUCTURE = 2;

	void setParentName(@Nullable String parentName);

	@Nullable
	String getParentName();

	void setBeanClassName(@Nullable String beanClassName);

	@Nullable
	String getBeanClassName();

	/**
	 * 设置bean作用域
	 */
	void setScope(@Nullable String scope);

	@Nullable
	String getScope();

	/**
	 * @see @Lazy
	 * lazy-init
	 * 是否延迟初始化bean  默认为false 如果设置为true 则直到第一次使用该bean时才会初始化bean
	 * 一般不需要更改改属性值,因为如果延迟初始化bean 可能会出现一个循环依赖,初始化顺序等问题
	 */
	void setLazyInit(boolean lazyInit);

	boolean isLazyInit();

	/**
	 * 当前bean的依赖
	 */
	void setDependsOn(@Nullable String... dependsOn);

	@Nullable
	String[] getDependsOn();

	/**
	 * 是否将当前bean定义为一个作为自动装配的候选者,可以自动注入到其他需要依赖该bean地方,默认值为true
	 * 如果为false 也可以显示的获取和注入 比如application.getBean();
	 */
	void setAutowireCandidate(boolean autowireCandidate);

	boolean isAutowireCandidate();

	/**
	 * 多个类型相同的bean 设置当前为主要的第一选择
	 */
	void setPrimary(boolean primary);

	boolean isPrimary();

	/**
	 * 设置生成该bean的工厂name
	 */
	void setFactoryBeanName(@Nullable String factoryBeanName);

	@Nullable
	String getFactoryBeanName();

	/**
	 * 设置生成该bean的工厂方法
	 */
	void setFactoryMethodName(@Nullable String factoryMethodName);

	@Nullable
	String getFactoryMethodName();

	/**
	 * 获取构造方法参数
	 */
	ConstructorArgumentValues getConstructorArgumentValues();

	default boolean hasConstructorArgumentValues() {
		return !getConstructorArgumentValues().isEmpty();
	}

	/**
	 * 获取bean的属性值
	 */
	MutablePropertyValues getPropertyValues();

	default boolean hasPropertyValues() {
		return !getPropertyValues().isEmpty();
	}

	/**
	 * init-method
	 * 设置bean的初始化方法
	 */
	void setInitMethodName(@Nullable String initMethodName);
	
	@Nullable
	String getInitMethodName();

	/**
	 * destroy-method
	 * 设置bean的销毁方法
	 */
	void setDestroyMethodName(@Nullable String destroyMethodName);
	
	@Nullable
	String getDestroyMethodName();

	void setRole(int role);

	int getRole();

	/**
	 *bean的描述信息
	 */
	void setDescription(@Nullable String description);

	@Nullable
	String getDescription();
	
	/**
	 * 判断bean是否为单例的
	 */
	boolean isSingleton();

	/**
	 * 判断bean 是否为原型的
	 */
	boolean isPrototype();

	/**
	 * 判断bean 是否为抽象的
	 */
	boolean isAbstract();

	@Nullable
	String getResourceDescription();

	/**
	 * 获取原始bean
	 */
	@Nullable
	BeanDefinition getOriginatingBeanDefinition();

}

你可能感兴趣的:(Spring,学习,spring)