通过Bean工厂创建bean实例的几种方法

使用bean工厂创建bean实例的几种方法。

一、/*实例工厂方法:实例工厂方法,即现需要创建工厂本身,在调用工厂的实例方法。
 * 来返回bean实例。
 * */

    <!-- 通过实例工厂方法来配置bean
fanctory-bean属性,指向实例工厂方法的类
factory-mehtod:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数。
    
     -->
    <bean id="carsfactory" class="com.spring.test.beans.factory.InstanceCarFactroy"></bean>
    <bean id="car2" factory-bean="carsfactory" factory-method="getCar">
        <constructor-arg value="ford"></constructor-arg>
    </bean>


建立配置文件如下:

    <!-- 通过实例工厂方法来配置bean
fanctory-bean属性,指向实例工厂方法的类
factory-mehtod:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数。
    
     -->
    <bean id="carsfactory" class="com.spring.test.beans.factory.InstanceCarFactroy"></bean>
    <bean id="car2" factory-bean="carsfactory" factory-method="getCar">
        <constructor-arg value="ford"></constructor-arg>
    </bean>


    <!-- 通过实例工厂方法来配置bean -->

二、通过
 * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean实例。
 * */

public class StaticCarFactory {
    private static Map<String,Car> cars=new HashMap<String,Car>();
    static {
        cars.put("audi", new Car("audi",300000));
        cars.put("ford", new Car("ford",400000));
        
    }
    //静态工厂:直接调用某一个类的静态方法就可以 返回Bean实例
    public static Car getCar(String name){
        return cars.get(name);
    }
}


配置文件如下
<!-- 通过静态工厂方法来配置bean。注意不是配置静态工厂方法实例。而是配置bean实例 -->
<!-- class属性,指向静态工厂方法的名字
	Factory-method:指向静态工厂方法的名字
	constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
说明:通过调用实例工厂方法创建Bean
	实例工厂方法:将对象的创建过程封装到另外一个对象实例方法里,当客户需要请求对象时,只需要简单的调用该实例方法
	而不需要关心对象的创建细节,
		要声明通过实例工厂方法创建的Bean.
			在bean的factory-method属性里指定拥有该工厂方法的Bean。
			在factory-method属性里指定该工厂方法的名称。
			使用construtor-arg元素为工厂方法传递方法参数。
	 -->
<bean id="car1" class="com.spring.test.beans.factory.StaticCarFactory" factory-method="getCar">
		<constructor-arg value="audi"></constructor-arg>
	</bean>
三、通过BeanFactory类来配置bean实例,注意一定要实现
FactoryBean<T>接口

import org.springframework.beans.factory.FactoryBean;

import com.spring.test.beans.factory.Car;
/*
 * 
 * 
 * */
public class CarFactoryBean  implements FactoryBean<Car>{
	private String brand;

//返回bean對象
	@Override
	public Car getObject() throws Exception {
		// TODO Auto-generated method stub
		return new Car(brand,5000);

//在该方法中可以返回一个新的Car具体对象

 }
//返回bean類型类型
	@Override
	public Class<?> getObjectType() {
		// TODO Auto-generated method stub
		return null;
	}
//返回是否是单实例
	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return false;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值