spring学习10(bean 工厂 FactoryBean配置)

通过全类名配置 最常用


        

工厂方法配置bean

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

java静态工厂类:

public class StaticFactory {
    private static Map 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);
    }
}

配置:


    
    
        
    
实例工厂方法 先要配置工厂的bean应为要先实例化工厂

java工厂类:

public class PojoFactory {
    private  Map 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);
    }
}

配置:


    
    
    
    
    
        
    
  • 使用factory-bean指定工厂bean factory-method指定工厂中的方法 constructor-arg子节点传入工厂参数

FactoryBean配置bean

1实现 FactoryBean
public class MyFactoryBean implements FactoryBean  {
    
    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 配置

        

  • class:指向FactoryBean的全类名 property子标签:配置的是FactoryBean的属性
    但返回的是我们需要的bean实例

你可能感兴趣的:(spring学习10(bean 工厂 FactoryBean配置))