Spring中的FactoryBean

Spring 通过反射机制利用<bean>的class属性指定实现类实例化Bean. 在某些情况下,  实例化Bean的过程比较复杂, 如果按照传统方式, 需要在<bean>中提供大量的配置信息. 配置方式的灵活性受限. 这时采用编码可能会获得一个简单的方式.

Spring 提供了一个 org.springframework.beans.factory.FactoryBean 工厂类接口. 用户可以通过实现该工厂类接口定制实例化Bean的逻辑. Spring提供了70多个FactoryBean的实现类, 它们隐藏了一些复杂实例化Bean的细节, 给上层应用带来了便利.

T  getObject()返回由FactoryBean创建的Bean实例.  如果 isSingleton()返回 true, 则该实例会放到 Spring 容器的单实例缓存池中.

Class<?>  getObjectType() 返回FactoryBean创建Bean的类型.

当配置文件中<bean>的class属性配置的实现类是 FactoryBean时, 通过getBean()方法返回的不是 FactoryBean本身, 而是 FactoryBean#getObject()方法所返回的对象.  相当于 FactoryBean#getObject() 代理了 getBean()方法.

示例代码如下:

CatFactoryBean实现了 FactoryBean接口, 自定义了对象的实现.  

配置文件:

测试代码:

当调用 getBean("cat") 方法时, Spring通过反射机制发现 CatFactoryBean 实现了 FactoryBean的接口. 这时Spring容器调用接口方法 CarFactoryBean#getObject() 返回工厂类创建的对象. 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值