Java面试题更新 2026-08-03

请说明 Spring 框架中 FactoryBean 的概念、核心作用以及它与普通 Bean 的区别,并举例说明其典型使用场景。

考察说明

考查对 Spring 容器中 FactoryBean 机制的理解,包括其定义、工作原理及与普通 Bean 的差异。

回答思路

  1. 【回答框架 1】FactoryBean 是 Spring 中一种特殊的 Bean,用于通过工厂方法创建对象。它本身被注册为 Bean,但 getObject() 方法返回的对象才是最终暴露给容器的目标对象。
  2. 【回答框架 2】实现 FactoryBean 接口需定义 getObject()、getObjectType() 和 isSingleton() 方法。容器在获取该 Bean 时,默认返回 getObject() 的结果,而非 FactoryBean 本身;若需获取 FactoryBean 实例,可在 bean 名称前加 & 符号。
  3. 【回答框架 3】与普通 Bean 的区别:普通 Bean 由容器直接实例化并管理生命周期,而 FactoryBean 允许自定义复杂的创建逻辑,例如对象需要动态代理、配置参数较多或需要初始化步骤时。典型场景包括 MyBatis 的 MapperFactoryBean、Spring AOP 的 ProxyFactoryBean 等。
  4. 【回答框架 4】使用 FactoryBean 时需注意其创建过程可能涉及代理或初始化开销,若 isSingleton() 返回 false 则需考虑并发和性能问题。理解其机制有助于排查容器启动或依赖注入中的异常。
  5. 【关键点 1】FactoryBean 是一种工厂模式的实现,通过 getObject() 返回目标对象。
  6. 【关键点 2】利用 & 前缀可获取 FactoryBean 自身,区别于目标对象。
  7. 【关键点 3】典型应用包括代理创建、集成第三方库等场景。
  8. 【易错点 1】混淆 FactoryBean 与 BeanFactory,前者是创建对象的接口,后者是 IoC 容器的基础接口。
  9. 【易错点 2】误以为注入的是 FactoryBean 实例,而实际注入的是 getObject() 返回的对象。
  10. 【易错点 3】忽略 isSingleton() 设置可能导致重复创建对象,影响性能。