Spring框架中BeanFactory和FactoryBean的区别

81 阅读2分钟

国内很少有人能够说清楚这两个的区别,说的云里雾里让人很难理解 简单来说:FactoryBean 是您作为开发人员在编写工厂类时实现的接口,并且您希望工厂创建的对象由 Spring 作为 bean 进行管理,而 BeanFactory 则 代表 Spring IoC容器,它包含托管 bean 并提供检索它们的访问权限。它是框架核心的一部分,实现控制反转容器的基本功能。 从图表上看, IoC 容器机制的实现位置主要在  Spring-Beans 包中,支持 Spring-Core的基本功能和(Spring-Context建立在这两个包的基础上,对其进行扩展并添加一定的附加功能)。顺便说一句,事实上 Spring-Context 构建在 Spring-Core 和 Spring-Beans 之上,这就是为什么只需将 Spring-Context 作为依赖项包含在内就可以访问应用程序中的 Spring IoC 容器功能。  创建、连接和管理 bean 的功能被打包到 org.springframework.beans 中。正是在这个包中我们有BeanFactory

**

在子包(org.springframework.beans.factory)中,您会找到FactoryBean。这两个接口是本文的主题。

那么问题是,BeanFactory和FactoryBean接口有何不同?

除了它们共享相同的根包并且都是字谜(这使它们令人困惑)这一事实之外,它们还有两个完全不同的目的。

FactoryBean是您作为开发人员在编写工厂类时实现的一个接口,并且您希望工厂类创建的对象由 Spring 作为 bean 进行管理,而BeanFactory另一方面,代表 Spring IoC 容器,它包含托管 bean 并提供检索它们的访问权限。它是框架核心的一部分,实现控制反转容器的基本功能。

在大多数情况下,您不会发现自己直接使用或实现BeanFactory接口,除非您要扩展框架的核心功能。当您有由工厂创建的对象需要由 Spring 管理时,您会实现 FactoryBean 。

更简洁地说,BeanFactory代表 Spring 容器,而FactoryBean 表示工厂类,其创建的对象被拾取并注册为容器中的 bean。