引言
org.springframework.beans.factory.support.InstantiationStrategy负责根据BeanDefinition对象创建一个Bean实例。Spring之所以将实例化Bean的工作通过一个策略接口进行描述,是为了可以方便地采用不同地实例化策略,以满足不同的引用需求,如通过CGLib类库为Bean动态创建子类在进行实例化。
常见的实现类
SimpleInstantiationStrategy是最常用的实例化策略,该策略利用Bean实现类的默认构造函数、带参构造函数或工厂方法创建Bean的实例。
CglibSubclassingInstantiationStrategy扩展了SimpleInstantiationStrategy,为需要进行方法注入的Bean提供了支持。它利用CGLib类库为Bean动态生成子类,在子类中生成方法注入的逻辑,然后使用这个动态生成的子类创建Bean的实例。
小结
InstantiationStrategy仅负责实例化Bean的操作,相当于执行Java语言中new的功能,它并不会参与Bean属性的设置工作。所以由InstantiationStrategy返回的Bean实例实际上是一个半成品的Bean实例,属性填充的工作留待BeanWrapper来完成。