不管是平时,还是面试,现在对于spring的讨论少了很多,不再像刚进入人们视野时,那么抢眼;spring现在就像空气一样,只要是java构建的项目,十之八九都是建立在spring之上,因此不可轻视
BeanFactory与FactoryBean,好久不见,一时也有些傻傻分不清楚,温习一下
如何区分
两者名字太接近了,经常被混淆,以结尾单词区分
BeanFactory以Factory结尾,表示它是一个工厂类(接口),整个spring可以说就是个大工厂,那它就是最基础的工厂
FactoryBean以Bean结尾,表示它是一个Bean,只是相对普通Bean,有些区别而已
BeanFactroy
在Spring中,BeanFactory是IOC容器的核心接口,定义了IOC的基本功能,包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖
从它的接口声明中,主要定义了getBean方法。getBean方法是IOC容器获取bean对象和引发依赖注入的起点。方法的功能是返回特定的名称的Bean
BeanFactory只是个接口,是spring中比较原始的Factory,但有着庞大的继承、实现体系,有众多的子接口、实现类,都是附加了某种功能的实现
FactoryBean
以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取
传统方式获取Bean,则需要在中提供大量的配置信息,配置方式的灵活性受到限制,通过FactoryBean创建Bean,相对灵活很多,可以对Bean进行修饰,更有类似像AOP的ProxyFactoryBean,对Bean进行proxy处理
总结
至此,简单的概念、作用区分已经完成。通过名字后缀可以快速区别两者
BeanFactory:只要用到spring,其实就是在使用BeanFactory;而FactroyBean则隐晦得多,需要扩展Bean时,则是FactoryBean,更多灵活使用再开一篇