Spring初学之通过工厂方法配置Bean

工厂方法配置bean分为两种,一种是实例工厂方法,另一种是静态工厂方法。

先来看看实体bean:

Car.java:

package spring.beans.factory;

public class Car {
    private String name;
    private int price;
    public Car(String name, int price) {
        super();
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", price=" + price + "]";
    }
}

一、实例工厂方法配置bean

InstanceBeanFactory.java:
package spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 实例工厂方法
 * @author Administrator
 *
 */
public class InstanceBeanFactory {
    private Map<String, Car> map=null;

    public InstanceBeanFactory() {
        map=new HashMap<String, Car>();
        map.put("奥迪", new Car("奥迪", 300000));
        map.put("福特", new Car("福特", 400000));
    }
    
    public Car getCar(String name){
        return map.get(name);
    }
    
}

spring的xml配置文件核心代码:

    <!-- 配置实例工厂方法的bean -->
    <bean id="instanceFactory" class="spring.beans.factory.InstanceBeanFactory"></bean>

    <!-- 通过实例工厂方法创建bean -->
    <bean id="car2" factory-bean="instanceFactory" factory-method="getCar">
        <constructor-arg value="福特"></constructor-arg>
    </bean>

二、静态方法配置bean

StaticBeanFactory.java:
package spring.beans.factory;

import java.util.HashMap;
import java.util.Map;

/**
 * 通过静态工厂方法创建bean
 * @author Administrator
 *
 */
public class StaticBeanFactory {
     private static Map<String, Car> map=new HashMap<String, Car>();
    static{
        map.put("长安", new Car("长安", 30000));
        map.put("奥迪", new Car("奥迪", 300000));
    }
    
    public static Car getCar(String name){
        
        return map.get(name);
    }
}

spring的xml配置文件核心代码:

    <!-- 通过静态工厂方法创建bean -->
    <bean id="car" class="spring.beans.factory.StaticBeanFactory"
    factory-method="getCar">
    <constructor-arg value="奥迪"></constructor-arg>
    
    </bean>

 

 

 

测试方法:

package spring.beans.factory.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import spring.beans.factory.Car;

public class Main {

    public static void main(String[] args) {

        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-factory.xml");
        Car car=(Car) ctx.getBean("car");
        System.out.println(car);
        
        Car car1=(Car) ctx.getBean("car2");
        System.out.println(car1);
    }

}

输出:

Car [name=奥迪, price=300000]
Car [name=福特, price=400000]

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 17:10
点赞 评论 收藏
分享
宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务