美文网首页Java
Java Spring-通过工厂方法配置Bean

Java Spring-通过工厂方法配置Bean

作者: 一亩三分甜 | 来源:发表于2020-01-15 10:13 被阅读0次

阻碍我们飞翔的力量,是来自我们内心的恐惧。

通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例

<!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 -->
    <!--
       class属性:指向静态工厂方法的全类名
       factory-method:指向静态工厂方法的名字
       constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
    -->
<bean id="car1"
      class="com.cloud.spring.beans.factory.StaticCarFactory"
      factory-method="getCar">
    <constructor-arg value="audi"></constructor-arg>
    </bean>
</beans>

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans-factory.xml");
        Car car1 = (Car) context.getBean("car1");
        System.out.println(car1);
    }
}
//输出
Car{brand='audi', price=300000.0}

通过调用实例工厂方法创建Bean:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。

要声明通过实例工厂方法创建的Bean

在bean的factory-bean属性里指定拥有该工厂方法的Bean

在factory-method属性里指定该工厂方法的名称

使用constructor-arg元素为工厂方法传递方法参数

    <!-- 配置工厂的实例 -->
    <bean id="carFactory" class="com.cloud.spring.beans.factory.InstanceCarFactory"></bean>
    <!-- 通过实例工厂方法来配置bean -->
    <!--
      class属性:指向静态工厂方法的bean
      factory-method:指向静态工厂方法的名字
      constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
    -->
    <bean id="car2" factory-bean="carFactory" factory-method="getCar">
        <constructor-arg value="ford"></constructor-arg>
    </bean>
            Car car2 = (Car) context.getBean("car2");
        System.out.println(car2);
//输出
Car{brand='ford', price=400000.0}

通过FactoryBean来配置Bean

//自定义的FactoryBean 需要实现FactoryBean接口
public class CarFactoryBean implements FactoryBean<Car> {

    private String brand;

    public void setBrand(String brand) {
        this.brand = brand;
    }

    //返回bean的对象
    @Override
    public Car getObject() throws Exception {
        return new Car(brand,500000);
    }

    //返回bean的类
    @Override
    public Class<?> getObjectType() {
        return Car.class;
    }

    //是否是单例
    @Override
    public boolean isSingleton() {
        return true;
    }
}

    <!--
    通过 FactoryBean 来配置Bean 的实例
    class:指向FactoryBean的全类名
    property:配置FactoryBean的属性
    但实际返回的却是FactoryBean的getObject()方法返回的实例
    -->
    <bean id="car" class="com.cloud.spring.beans.factorybean.CarFactoryBean">
        <property name="brand" value="BMW"></property>
    </bean>
    
    public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans-beanfactory.xml");
        Car car = (Car) context.getBean("car");
        System.out.println(car);
    }
}
//输出
Car{brand='BMW', price=500000.0}

相关文章

网友评论

    本文标题:Java Spring-通过工厂方法配置Bean

    本文链接:https://www.haomeiwen.com/subject/yrttzctx.html