章
目
录
Java面试题:说下Spring中BeanFactory和FactoryBean的区别
得分点
BeanFactory定义、FactoryBean定义
标准回答:
BeanFactory是Spring框架中的一个接口,它定义了一种机制来管理Spring容器中的Bean对象。它提供了一种能够获取、配置、管理Bean的方式,使得开发者可以通过编程方式访问和控制Bean的生命周期和依赖关系。BeanFactory的常用方法包括getBean(String name)
用于获取Bean对象,containsBean(String name)
用于检查是否存在特定的Bean,以及其他用于获取Bean信息的方法。
而FactoryBean是一个特殊的Bean,它实现了FactoryBean接口,不同于普通的Bean。FactoryBean本身是一个工厂,能够产生或修饰其他对象的生成。当用户使用容器时,可以通过转义符“&”来获取FactoryBean本身,以区分获取FactoryBean产生的对象和获取FactoryBean本身。举例来说,如果有一个名为”alphaObject”的FactoryBean,使用”&alphaObject”获取的是FactoryBean本身,而不是由”alphaObject”这个FactoryBean产生的对象。
在Spring中,FactoryBean通常用于创建一些特殊的Bean,例如代理对象、数据源等。FactoryBean的实现类需要提供getObject()
方法来返回实例,getObjectType()
方法用于指定该FactoryBean所创建的Bean的类型,以及其他用于控制Bean的生命周期和配置的方法。
加分回答:
BeanFactory的常用方法包括:
getBean(String name)
: 用于从Spring容器中获取特定名称的Bean对象。containsBean(String name)
: 用于检查Spring容器中是否存在特定名称的Bean。isSingleton(String name)
: 用于判断指定名称的Bean是否为单例。isPrototype(String name)
: 用于判断指定名称的Bean是否为多例。isTypeMatch(String name, ResolvableType typeToMatch)
: 用于判断指定名称的Bean是否与给定类型匹配。getType(String name)
: 用于获取指定名称的Bean的Class类型。getAliases(String name)
: 用于获取指定名称的Bean的所有别名。
FactoryBean的方法包括:
T getObject()
: 返回由FactoryBean创建或修饰的Bean实例。Class<?> getObjectType()
: 返回FactoryBean所创建的Bean的类型。default boolean isSingleton()
: 返回FactoryBean所创建的Bean是否为单例。