spring之实例化Bean的几种方式

一.Bean的实例化方法如下三种
1.使用类构造器实例化
2.使用工厂方法(静态工厂方法、实例工厂方法)
3.实现FactoryBean接口

二.使用类构造器实例化:
在配置bean时,使用class属性指定类的全名称(即全类名)使用类构造器实例化bean的方式
三.工厂方法实例化
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中的配置如下所示
静态工厂配置bean的方式
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>

你可能感兴趣的:(spring,java,spring,maven)