美文网首页spring零基础学习
spring学习10(bean 工厂 FactoryBean配置

spring学习10(bean 工厂 FactoryBean配置

作者: 又是那一片天 | 来源:发表于2017-07-21 17:56 被阅读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>
  • 使用factory-bean指定工厂bean factory-method指定工厂中的方法 constructor-arg子节点传入工厂参数

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;
    }
}
  • getObject()方法 返回bean对象
  • getObjectType()方法 bean类型
  • isSingleton()方法 是否是单利
2 配置
<bean id="car" class="chen.MyFactoryBean">
        <property name="brand" value="宝马"></property>
</bean>
  • class:指向FactoryBean的全类名 property子标签:配置的是FactoryBean的属性
    但返回的是我们需要的bean实例

相关文章

网友评论

    本文标题:spring学习10(bean 工厂 FactoryBean配置

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