spring零基础学习

spring学习10(bean 工厂 FactoryBean配置

2017-07-21  本文已影响0人  又是那一片天

通过全类名配置 最常用

<bean id="hello" class="pojo.HelloWorld">
        <property name="name" value="你好 Spring"></property>
</bean>

工厂方法配置bean

静态工厂方 :使用bean标签中的factory-method="方法名"属性 调用工厂静态方法方法 方法参数使用constructor-arg子节点传入

java静态工厂类:

public class StaticFactory {
    private static Map<String, Car> map=new HashMap<>();
    static {
        Car baoma=new Car();
        baoma.setBrand("宝马");
        baoma.setPrice(1000000);
        baoma.setPerimeter(80);
        map.put("baoma", baoma);
        
        Car benchi=new Car();
        benchi.setBrand("奔驰");
        benchi.setPrice(8500000);
        benchi.setPerimeter(1000);
        map.put("benci", benchi);
    }
    public static Car getCar(String name) {
        return map.get(name);
    }
}

配置:

<!-- 静态工厂方法 不是配置工厂 -->
    <!-- 使用factory-method="方法名" 调用工厂静态方法方法 方法参数使用constructor-arg子节点传入 -->
    <bean id="baoma" class="chen.StaticFactory" factory-method="getCar">
        <constructor-arg value="baoma"></constructor-arg>
    </bean>
实例工厂方法 先要配置工厂的bean应为要先实例化工厂

java工厂类:

public class PojoFactory {
    private  Map<String, Car> map=null;
    public PojoFactory() {
        map=new HashMap<>();
        Car baoma=new Car();
        baoma.setBrand("宝马");
        baoma.setPrice(1000000);
        baoma.setPerimeter(80);
        map.put("baoma", baoma);
        
        Car benchi=new Car();
        benchi.setBrand("奔驰");
        benchi.setPrice(8500000);
        benchi.setPerimeter(1000);
        map.put("benci", benchi);
    }
    public  Car getCar(String name) {
        return map.get(name);
    }
}

配置:

<!-- 实例工厂方法 -->
    <!-- 配置工厂的实例 -->
    <bean id="carFactory" class="chen.PojoFactory"></bean>
    <!-- 通过实例工厂配置bean -->
    <!-- 使用factory-bean指定工厂bean  factory-method指定工厂中的方法 constructor-arg子节点传入工厂参数 -->
    <bean id="benci"  factory-bean="carFactory" factory-method="getCar">
        <constructor-arg value="benci"></constructor-arg>
    </bean>

FactoryBean配置bean

1实现 FactoryBean<T>
public class MyFactoryBean implements FactoryBean<Car>  {
    
    private String brand;

    @Override
    public Car getObject() throws Exception {//返回bean对象
        Car car=new Car();
        car.setBrand(brand);
        car.setPrice(1000000);
        car.setPerimeter(50);
        return car;
    }
    @Override
    public Class<?> getObjectType() {//bean类型
        return Car.class;
    }
    @Override
    public boolean isSingleton() {//是否是单利
        return false;
    }
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
}
2 配置
<bean id="car" class="chen.MyFactoryBean">
        <property name="brand" value="宝马"></property>
</bean>
上一篇下一篇

猜你喜欢

热点阅读