BeanDefinition BeanFactory Bean的关系

一、什么是BeanDefinition

BeanDefinition表示Bean定义,Spring根据BeanDefinition来创建Bean对象,BeanDefinition有很多属性来描述Bean。

1、BeanDefinition中的重要属性

a. beanClass

表示一个bean的类型,XXX.class,spring在创建Bean的过程中会根据此属性来实例化得到对象

b. scope

表示一个bean的作用域:
scope=singleton,该bean就是一个单例bean
scope=prototype,该bean就是一个原型bean,每次获得bean都会生成一个新的对象

c. isLazy

表示一个bean是不是需要懒加载,注:原型bean的isLazy属性不起作用。
懒加载的单例bean会在第一次getBean的时候生成bean,非懒加载的的单例bean会在spring启动过程中生成bean

d. dependsOn

表示一个bean在创建前所依赖的其他bean,在一个bean创建前,它所依赖的的bean得先全部创建好

e. primary

表示一个bean是主bean,在spring中一个类型可以有多个bean对象,在进行依赖注入时,如果根据类型找到了多个bean,则会判断这些bean中是否会存在一个主bean,如果存在,则直接将这个bean注入给属性

f. initMethodName

表示一个bean的初始化方法,一个bean的生命周期中有一个步骤叫做初始化,spring会在这个步骤中去调用bean的初始化方法,初始化的逻辑由程序要自己控制,表示程序员可以自定义逻辑对bean进行加工

二、什么是 BeanFactory

BeanFactory是一种“spring容器”它可以用来创建Bean、获取Bean。
BeanFactory将利用BeanDefinition生成Bean对象

BeanFactory的核心子类接口和实现类

ListableBeanFactory ConfigurableBeanFactory AutowireCapableBeanFactory AbstractBeanFactory DefaultListableBeanFactory
DefaultListableBeanFactory的功能:
支持单例Bean,Bean别名、父子BeanFactory、Bean类型转换、Bean后置处理、自动装配等等

三、Bean的生命周期

  1. BeanDefinition: BeanDefinition表示Bean定义、它定义了某个Bean类型、比如需要利用BeanDefinition中beanClass的属性确定Bean类型,从而实例化对象
  2. 构造方法推断:一个Bean中可以有多个构造方法,此时需要spring来判断用那个构造方法,之后确定一个构造方法,就可以利用构造方法来实例化得到一个对象了
  3. 实例化 (构造方法反射得到对象):通过构造方法反射得到一个实例化对象,在spring中可以通过BeanPostProcessor机制对实例化进行干预
  4. 属性填充(给输出进行自动填充):实例化得到的对象不是完整的对象、不完整的意思是该对象中的属性还没有进行填充,也就是spring还没有自动给某些属性赋值,属性填充就是通常说的依赖注入、自动注入
  5. 初始化(对其他属性校验、赋值):可以利用初始化机制对Bean进行自定义加工,比如利用InitializingBean接口对Bbean中的其他属性进行赋值、或对Bean中的某些属性进行校验
  6. 初始化后(AOP、生成代理对象):AOP机制就是在这个步骤中通过BeanPostProcessor自己实现的,初始化之后得到的对象才是真正的Bean对象
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值