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]

 

全部评论

相关推荐

bg27强双非本,目前在学习golang后端gin框架部分,在b站找了一个轮子项目敲了一下,技术栈是gin&nbsp;+&nbsp;gorm&nbsp;+&nbsp;mysql&nbsp;+&nbsp;redis。我目前的想法是这一个月学习408和go八股以及刷算法然后在12月找个寒假实习然后大三下开始准备考研。我是考研意愿比较强烈,想问一下我是应该all&nbsp;in其中一个方向吗,我感觉我实习对我考研来说也是没什么帮助的好像。
牛客28967172...:毕业工作,考研,考公是完全不同的方向。 99%的人拼尽全力也只能把一个做好(能做好都已经是佼佼者了,比如进进大厂,考985或者考公) 如果你确定要考研可以不用学任何就业技术框架,也不用实习经验,刷题背知识点就行,但注意必须考92院校起步,因为这个年代双非硕毕业后完全不如双非本(互联网行业),可以说双非硕在互联网就业完全是负收益
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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