目的

BeanDefinition

Spring 容器在进行实例化时,会将 xml 配置的<bean>的信息封装成一个 BeanDefinition 对象,Spring 根据 BeanDefinition 来创建 Bean 对象,里面有很多的属性用来描述 Bean

Untitled

Bean 创建的过程

实例化阶段

对于一个 Bean 来说,实例化有多种方式,包括通过 BeanDefinition 里定义的 Supplier 接口、或者是工厂方法、再或者是 Bean 本身的有参或无参构造函数。

Spring 会依次尝试用上面的方法来创建一个 Bean,如果是用有参构造函数的方式创建,那么这个时候还会完成构造器注入。

依赖注入阶段

第二个阶段是依赖注入阶段,

Aware 接口

  1. BeanNameAware: 允许Bean获取在容器中配置的自己的名字。
  2. BeanFactoryAware: 允许Bean获取对BeanFactory的引用,从而可以在运行时访问容器的服务。
  3. ApplicationContextAware: 允许Bean获取对ApplicationContext的引用,提供更多的应用程序级别的功能。