实例化Bean的三种方式

## <constructor-arg> 实现带参构造方法实例化

基于静态工厂(不太常用)
<!--静态工厂通过静态方法创建对象,隐藏创建对象的细节-->
<bean id="apple3" class="factory.AppleStaticFactory" factory-method="createSweetApple"/>
/**
* 静态工厂通过静态方法创建对象,隐藏创建对象的细节
*/
public class AppleStaticFactory {
public static Apple createSweetApple(){
System.out.println("基于静态工厂");
//我们可以才创建对象中赋予额外行为
Apple apple = new Apple();
apple.setTitle("红富士");
apple.setColor("红色");
apple.setOrigin("美国");
return apple;
}
}
静态工厂创建对象,和工厂实例创建对象本质上没有区别。(随着Spring越来越强大,工厂方式创建对象的方式很少用了
工厂实例方法创建对象(不太常用)
<!-- 工厂实例方法创建对象是指IOC容器对工厂类进行实例化并调用对应的实例方法创建对象的过程-->
<bean id="factoryInstance" class="factory.AppleFactoryInstance" />
<bean id="instance" factory-bean="factoryInstance" factory-method="createSweetApple"/>
public class AppleFactoryInstance {
public Apple createSweetApple(){
System.out.println("基于静态工厂");
//我们可以才创建对象中赋予额外行为
Apple apple = new Apple();
apple.setTitle("红富士");
apple.setColor("红色");
apple.setOrigin("美国");
return apple;
}
}
- 第一个 bean 用于实例工厂对象
- 第二个 bean 使用工厂对象构建实例方法
使用静态工厂实例化对象与基于构造方法实例化对象的区别:
SpringIoc容器里管理的不是某个特定的苹果,而是实例化这些苹果的工厂,这些实例化苹果的工厂再决定实例化哪个苹果,这种使用Java代码形式创建对象可以在创建对象时进行更多的额外操作。
静态工厂创建对象,和工厂实例创建对象本质上没有区别。(随着Spring越来越强大,工厂方式创建对象的方式很少用了