通过工厂方法创建bean实例

1.静态工厂方法

/**
* 静态工厂方法:直接调用某一个类的静态方法就可以返回bean实例

*
*/

1)先建立静态工厂
public class StaticCarFactory {
private static Map<String,Car> cars = new HashMap<String,Car>();
static {
cars.put("audi", new Car("audi",300000));
cars.put("baoma", new Car("baoma",500000));
}
//静态工厂方法
public static Car getCar(String name) {
return cars.get(name);
}
}2)配置文件

<!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 -->
<!--
class属性:指向静态工厂方法的全类名
factory-method:指向工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="car1" class="com.mww.spring.factory.StaticCarFactory" factory-method="getCar">
<constructor-arg value="audi"></constructor-arg>
</bean>

2.实例工厂方法

1)建立工厂

/**
* 实例工厂方法:实例工厂的方法 ,即现需要创建工厂本身,再调用工厂的实例方法来返回bean的实例
*
*
*/
public class InstanceCarFactory {
private Map<String,Car> cars = null;
public InstanceCarFactory() {
cars = new HashMap<>();
cars.put("audi", new Car("Audi",300000));
cars.put("bama", new Car("Baoma",500000));
}
public Car getCar(String brand) {
return cars.get(brand);
}
}

2)配置文件

<!-- 配置工厂的实例 -->
<bean id="carFactory" class="com.mww.spring.factory.InstanceCarFactory"></bean>
<!-- 通过实例方法来配置bean -->
<!--
factory-bean属性:指向实例工厂方法的bean
factory-method:指向工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="bama"></constructor-arg>
</bean>

3.main

public class Main {

public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car = (Car) ctx.getBean("car1");
System.out.println(car);
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
}

}

原文地址:https://www.cnblogs.com/mwwex/p/12070721.html

时间: 2024-11-09 04:03:25

通过工厂方法创建bean实例的相关文章

spring 通过工厂方法配置Bean

概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静态方法创建的Bean,须要在Bean地class属性里指定拥有该工厂的方法的类,同一时候在factory-method属性里指定工厂方法的名称.最后,使用<constructor-arg>元素为该方法传递方法參数 通过调用实例工厂方法创建Bean 实例工厂方法:将对象的创建过程封装到另外一个对象实

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 ge

spring4-2-bean配置-9-通过工厂方法配置bean

除了可以通过配置全类名使用反射的方式创建bean外,还可以使用工厂方法创建bean.这点在整合框架的时候会用到. 1.静态工厂方法 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不去关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg>

通过工厂方法配置Bean

[工厂方法(静态工厂方法&实例工厂方法)] [通过调用静态工厂方法创建Bean] 1.调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节. 2.要声明通过静态方法创建的Bean,需要在Bean的class属性里指定拥有该工厂的方法的类,同时在factory-method属性里指定工厂方法的名称,最后,使用<construtor-arg>元素为该方法传递方法参数. beans-factory.xml: 1

4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean

1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时被销毁 2)spring容器管理prototype作用的生命周期,spring只负责创建,容器实例化之后就交给客户端进行管理,spring容器不会再 跟踪其生命周期. 可以借鉴servlet的生命周期"实例化--初始化--接受请求--销毁" Spring IOC容器可以管理Bean的生命周

Spring 使用实例工厂方法实例化Bean

知识点介绍: 实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先new工厂类,再调用普通的实例方法. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 操作步骤: 1.创建Speaker对象. public class Speaker { //使用实例工厂方法实例化Bean private String speakerName; public Speaker(String speakerName) { this.speakerName = speak

Spring框架笔记(十一)——IOC容器创建bean实例的第三种方法——FactoryBean

IOC容器创建bean实例有3类方法: 1 通过bean对应实例的全类名 2 通过工厂方法,包括静态工厂和实例工厂 3 实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean 今天我们介绍这第三种方法--FactoryBean Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法

spring之通过实例工厂方法配置Bean

Car.java package com.gong.spring.beans.factory; public class Car { private String name; private double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } p

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forName(className) public class RefTest { @Test public void testRef(){ //Class cls = RefTest.class; //Class.forName("com.jboa.service.RefTest"); //new RefTest()