了解bean的一生

容器启动之后,并不会马上就根据bean的定义去实例化相应的bean。容器在在实例化bean之前,已经拥有了所有bean相关的BeanDefinition。一旦通过BeanFactory的getBean()方法请求获取某个对象实例的时候,才有可能触发bean实例化阶段的活动。

  • bean的实例化与BeanWrapper
  1. 容器在内部实现的时候,采用策略模式来决定采用何种方式初始化bean实例。通常,可以通过反射或者CGLIB动态字节码来初始化相应的bean实例获取动态生成其子类。容器只要根据相应bean定义的BeanDefinition取得实例化信息,结合CglibSubclassingInstantiationStrategy以及不同的bean定义类型,就可以返回实例化完成的对象实例。但是,并不是返回直接构造完成的对象实例,而是以BeanWrapper对构造完成的对象实例进行包裹,返回相应的BeanWrapper实例。

  2. BeanWrapper在spring框架内部使用,BeanWrapper会将对其包裹的bean设置或者获取相应的属性值。