<p>
一、BeanDefinition介绍</p><p/><div class="image-package"><img src="https://img.haomeiwen.com/i8919689/fdf864b983f84739.jpg" contenteditable="false" img-data="{"format":"jpeg","size":51119,"height":540,"width":1370}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>
BeanDefinition主要是用来描述Bean,存储Bean的相关信息,主要包括:Bean的属性、是否单例、延迟加载、Bean的名称、构造方法等。
BeanDefinition的结构如下图:
BeanDefinition定义如下:
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {}
● BeanDefinition继承了AttributeAccessor,具备处理属性的能力
● BeanDefinition继承了BeanMetadataElement,可以持有Bean元数据元素,作用是可以持有XML文件的一个bean标签对应的Object。
二、BeanDefinition各子类说明
● AnnotatedBeanDefinition :该接口扩展了 BeanDefinition 的功能,其用来操作注解元数据。 通过注解方式得到的 Bean(@Component、@Bean),其 BeanDefinition 类型都是该接口的实现类。
● RootBeanDefinition:该类继承自 AbstractBeanDefinition,它可以单独作为一个 BeanDefinition,也可以作为其他 BeanDefinition 的父类。
● ChildBeanDefinition:不可以单独存在,必须依赖一个父 BeanDetintion,构造 ChildBeanDefinition 时,通过构造方法传入父 BeanDetintion 的名称或通过 setParentName 设置父名称。
● GenericBeanDefinition:是 Spring 2.5 以后新引入的 BeanDefinition,是 ChildBeanDefinition 更好的替代者,它同样可以通过 setParentName 方法设置父 BeanDefinition,既可以单独使用也可以作为子BeanDefinition使用。
● ConfigurationClassBeanDefinition:该类继承自 RootBeanDefinition ,并实现了 AnnotatedBeanDefinition 接口。这个BeanDefinition用来描述加了@Bean 注解的Bean
● AnnotatedGenericBeanDefinition:该类继承自 GenericBeanDefinition ,并实现了 AnnotatedBeanDefinition 接口。这个 BeanDefinition 用来描述标注 @Configuration 注解的 Bean。
● ScannedGenericBeanDefinition:该类继承自 GenericBeanDefinition ,并实现了 AnnotatedBeanDefinition 接口。这个 BeanDefinition 用来描述标注 @Component 注解的 Bean,其派生注解如 @Service、@Controller 也同理。
</p>








网友评论