美文网首页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