spring factory-method和spring-bean

配置工厂Bean
通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象.
一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean.
调用getBean()方法,Spring返回的不是直接创建的Bean的实例,而是由工厂Bean创建的Bean实例.
一般在Spring中配置工厂Bean,有3中不同类型的工厂Bean的配置.
1.静态工厂
创建具体Bean实例的是静态方法
public class StaticFactoryBean{
    public staticInteger createRandom(){
       return newInteger(new Random().nextInt());
    }
}

将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称
<bean id="random" class="example.chapter3.StaticFactoryBean" scope="prototype"      
        factory-method="createRandom"//createRandom方法必须是static的,才能找到             />

2.实例工厂
创建具体Bean实例的是实例,不是静态方法
publicclass InstanceFactoryBean {
    privateString format = "yy-MM-dd HH:mm:ss";
    publicvoid setFormat(String format) {    this.format = format;  }
    publicString createTime() {   return new SimpleDateFormat(format).format(new Date());  }
}


配置文件需要配置两个bean:第一个Bean和普通的Bean没有区别,第二个bean定义如何通过工厂Bean获取Bean,需要指定 工厂Bean的名称和方法名称
<bean id="instanceFactoryBean"class="example.chapter3.InstanceFactoryBean"><property name="format" value="yyyy-MM-dd HH:mm:ss"/></bean>
<bean id="currentTime"factory-bean="instanceFactoryBean"factory-method="createTime"/>

3.实现FactoryBean接口
publicclass PiFactoryBean implements FactoryBean {
    publicObject getObject() throws Exception {  return new Double(3.14159265358979);  }
    publicClass getObjectType() {  return Double.class;  }
    publicboolean isSingleton() {  return true;  }
}
实现了FactoryBean接口的Bean,不再被视为普通的Bean.Spring会自动检测.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值