Spring BeanFactory 和 FactoryBean 的区别

BeanFactory

是一个接口,public interface BeanFactory,提供如下方法:

  • Object getBean(String name)
  • <T> T getBean(String name, Class<T> requiredType)
  • <T> T getBean(Class<T> requiredType)
  • Object getBean(String name, Object... args)
  • boolean containsBean(String name)
  • boolean isSingleton(String name)
  • boolean isPrototype(String name)
  • boolean isTypeMatch(String name, Class<?> targetType)
  • Class<?> getType(String name)
  • String[] getAliases(String name)

在 Spring 中,BeanFactory 是 IoC 容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

BeanFactory 提供的高级配置机制,使得管理任何性质的对象成为可能。
ApplicationContextBeanFactory 的扩展,功能得到了进一步增强,比如更易与 Spring AOP 集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的 context 实现(如针对 web 应用的WebApplicationContext)。
用的比较多的 BeanFactory 的子类是 ClassPathXmlApplicationContext,这是 ApplicationContext 接口的一个子类,ClassPathXmlApplicationContext 从 xml 的配置文件中获取 bean 并且管理他们

FactoryBean

Spring 中为我们提供了两种类型的 bean,一种就是普通的 bean,我们通过 getBean(id) 方法获得是该 bean 的实际类型,另外还有一种 bean 是 FactoryBean,也就是工厂 bean,我们通过 getBean(id) 获得是该工厂所产生的 Bean 的实例,而不是该 FactoryBean 的实例。

FactoryBean 是一个 Bean,实现了 FactoryBean 接口的类有能力改变 bean,FactoryBean 希望你实现了它之后返回一些内容,Spring 会按照这些内容去注册 bean。
public interface FactoryBean<T>,提供如下方法:
T getObject()
Class<?> getObjectType()
boolean isSingleton()

通常情况下,bean 无须自己实现工厂模式,Spring 容器担任工厂 角色;但少数情况下,容器中的 bean 本身就是工厂,作用是产生其他 bean 实例。由工厂 bean 产生的其他 bean 实例,不再由 Spring 容器产生,因此与普通 bean 的配置不同,不再需要提供 class 元素。

相关文章

转载请注明: 转载自 浮生一程
本文链接地址 Spring BeanFactory 和 FactoryBean 的区别
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇