一.Bean的实例化方法如下三种
1.使用类构造器实例化
2.使用工厂方法(静态工厂方法、实例工厂方法)
3.实现FactoryBean接口
二.使用类构造器实例化:
在配置bean时,使用class属性指定类的全名称(即全类名)
三.工厂方法实例化
1.静态工厂方法:
方法就是将对象创建过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法。
要声明通过静态方法创建的bean,需要在bean的class属性中指定拥有该工厂方法的类,同时在factory-method属性中指定工厂方法的名称,最后使用元素为该方法传递方法参数
静态方法如下所示
public class FruitFactory {
public static Fruit createApple() {
Fruit fruit = new Fruit();
fruit.setType("apple");
return fruit;
}
public static Fruit createPear() {
Fruit fruit = new Fruit();
fruit.setType("pear");
return fruit;
}
}
bean.xml中的配置如下所示
2.实例工厂方法配置方式:
将对象的创建过程封装到另一个对象实例的方法中。当客户端需要请求对象时,只需要简单的调用该实例方法。
使用方式:
先声明要使用实例化方法创建的bean
在第二个bean的factory-bean属性里指定拥有该工厂方法的bean
在factory-method属性里面指定该工厂方法的名称
实例方法如下所示
public class FruitFactory {
//实例工厂方法
public Fruit createPeach(){
Fruit fruit = new Fruit();
fruit.setType("Peach");
return fruit;
}
}
bean中的配置如下所示(无参数)
<bean id="fruitFactory" class="anhui.FruitFactory"></bean>
<bean id="peach" factory-bean="fruitFactory" factory-method="createPeach"></bean>
如果有参数,bean中的配置情况如下
<bean id="fruitFactory" class="anhui.FruitFactory"></bean>
<bean id="peach" factory-bean="fruitFactory" factory-method="createPeach">
<constructor-org>index="0" value="peach"</constructor-org>
</bean>
3.使用FactoryBean接口进行实例化
FactoryBean:由Spring提供
getObjectType:返回bean的实例
isSingleton:返回的bean是否是单例的。
配置时:
class指定为上面创建的FactoryBean实现类。实际返回的是FactoryBean的getObject方法返回的实例。
Property:为实现类的property
实现类代码如下所示
import org.springframework.beans.factory.FactoryBean;
public class FruitFactoryBean implements FactoryBean {
//指定创建对象的方法
public Fruit getObject() throws Exception {
Fruit fruit = new Fruit();
fruit.setType("strawberry");
return fruit;
}
public Class<?> getObjectType() {
return Fruit.class;
}
public boolean isSingleton() {
return true;
}
}
bean中的配置如下所示:
<bean id="strawberry" class="wanho.FruitFactoryBean"></bean>