Spring 面试题, Spring 中的 FactoryBean 是什么?
Spring 面试题, Spring 中的 FactoryBean 是什么?
QA
Step 1
Q:: Spring 中的 FactoryBean 是什么?
A:: FactoryBean 是 Spring 框架中的一个特殊接口,它允许我们自定义创建 bean 实例的逻辑。当我们使用 FactoryBean 接口时,Spring 容器将调用 FactoryBean 的 getObject()
方法来获取 bean 实例,而不是直接使用类的构造器。FactoryBean 主要用于一些复杂的实例化逻辑或第三方库的集成,这些场景下直接使用类的构造器可能不够灵活或方便。
Step 2
Q:: FactoryBean 和普通的 Bean 有什么区别?
A:: 普通的 Bean 是通过类的构造器或静态工厂方法实例化的,而 FactoryBean 则可以通过实现复杂的实例化逻辑,创建自定义的 Bean。FactoryBean 的一个特别之处在于,如果在 Spring 配置文件中引用 FactoryBean 的 id,Spring 实际上会返回 FactoryBean.getObject() 方法返回的实例,而不是 FactoryBean 自身。如果想要获取 FactoryBean 实例本身,则需要在 id 前加上 '&'
符号。
Step 3
Q:: FactoryBean 适用于哪些场景?
A:: FactoryBean 适用于需要动态控制 Bean 实例化逻辑的场景,如创建代理对象、集成第三方库、或在实例化过程中需要复杂初始化逻辑的情况。它还可以用于生成单例模式外的对象,或者在应用程序运行期间动态地改变实例化的行为。
Step 4
Q:: 如何在 Spring 中使用 FactoryBean?
A:: 要在 Spring 中使用 FactoryBean,你需要定义一个实现 FactoryBean 接口的类,并实现其三个核心方法:getObject()、getObjectType()、和 isSingleton()。然后在 Spring 的配置文件中或通过 @Bean 注解将这个 FactoryBean 注册为一个 bean。Spring 容器会调用 getObject()
方法来获取最终的 bean 实例。