spring-beans 深入源码之bean的定义

基于bean得定义有xml和注解两种方式,了解了xml方式后很容易了解注解,先看xml方式
看spring-beans模块的test

spring-beans 深入源码之bean的定义_第1张图片
Paste_Image.png

包org.springframework.beans.factory.xml下面的类的作用基本是xmlbean得定义读取解析创建相关的类,看test中的
TestBeanCreator类和BeanDefinitionTests非常简单
对于bean定义在spring得概念中是这样的
Properties Description
class 这个属性在创建bean得时候是必须要有的
name 这个属性是bean唯一标示,在xml定义中可以用id或者name来代替
scope 这个是定义bean的作用范围生命周期
constructor-arg 构造函数的参数配置
properties bean的属性
autowiring mode 这个是spring装配bean得方式 按name之类的
lazy-initialization mode 是否是懒加载模式 ,懒加载是非容器初始化的时候就创建相应的bean而是等到有其他类需要这个 bean的时候才会创建然后放到内存
initialization method 在bean的所有属性被设置后会走这个方法 在bean生命周期中也有讲到
destruction method 在bean销毁的时候会调用到。

无论xml还是注解都是一样的概念
xml得demo 找到test.xml


spring-beans 深入源码之bean的定义_第2张图片
Paste_Image.png
spring-beans 深入源码之bean的定义_第3张图片
Paste_Image.png

里面有bean不同属性测试用到的xml文件

注解方式的话 spring自己新增了几个 [@Required][@Autowired][@Qualifier]等 还有J2EE5支持的[JSR-250 Annotations]等。

java代码实现,其实无论xml还是注解 只是spring帮助你解析了而已 这些都可以通过java代码实现
看BeanDefinitionTests中test测试


spring-beans 深入源码之bean的定义_第4张图片
Paste_Image.png

自己跑一下test就知道啦
主要的类在org.springframework.beans.factory.support 这个package中
BeanDefinition 是上层的接口
A BeanDefinition describes a bean instance, which has property values,constructor argument values, and further information supplied by concrete implementations

注解的bean定义类在org.springframework.context.annotation这个包中
其中AnnotatedBeanDefinition也是继承自BeanDefinition得接口
多了两个
/**
* Obtain the annotation metadata (as well as basic class metadata)
* for this bean definition's bean class.
* @return the annotation metadata object (never {@code null})
*/
AnnotationMetadata getMetadata();

/**
 * Obtain metadata for this bean definition's factory method, if any.
 * @return the factory method metadata, or {@code null} if none
 * @since 4.1.1
 */
MethodMetadata getFactoryMethodMetadata();

定义这个类在core的module中

元数据(描述数据得数据 这个在注解中有体现)@Interface这个关键字就是

你可能感兴趣的:(spring-beans 深入源码之bean的定义)