spring源码学习二:FactoryBean的使用

本文深入解析Spring的FactoryBean接口,探讨其在简化bean实例化过程、隐藏复杂细节及支持泛型的重要性。通过实例和代码说明如何使用FactoryBean以及获取其实际对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FactoryBean接口分析和使用

一下内容大都来自《spring源码深度解析》一书,感兴趣的可以买书支持一下作者!

1 概述

1 FactoryBean存在的意义:
某些时候,spring实例化bean的过程可能会比较复杂,而此时若直接使用spring反射机制实例化bean,则需要在bean中提供大量的配置信息,导致配置灵活性受限。采用编码方式可以解决这个问题,故而spring提供了一个FactoryBean的工厂类接口。

2 简述
FactoryBean对于spring来说占有重要的地位,spring自身就提供了70多种FactoryBean的实现。它们隐藏了实例化bean时的复杂细节,为上层的应用带来了便利。且spring的FactoryBean支持泛型。

2 接口分析

FactoryBean的接口源码如下所示:

public interface FactoryBean<T> {
    T getObject() throws Exception;

    Class<?> getObjectType();

    boolean isSingleton();
}

三个方法的作用分别为:

1 T getObject() throws Exception;

返回由FactoryBean创建的bean实例,如果isSingleton为true,则该实例会被放进spring容器中单实例缓存池中;

2 Class<?> getObjectType();

返回FactoryBean创建的bean的类型;

3 boolean isSingleton();

判断由FactoryBean创建的bean实例是singleton还是prototype;

3 使用

当直接调用getBean方法,方法的参数为一个FactoryBean实现类时,返回的不是这个FactoryBean本身,而是FactoryBean#getObject()方法所返回的对象。

当然,若想要获得实现了FactoryBean的类本身,spring也提供了方法。即在调用getBean方法时,在该类对应的beanName前加"&",例如getBean("&customClass");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值