查漏补缺(三):BeanFactory和FactoryBean的区别?

这两者其实没什么关系,只是因为名字相同经常被放在一起比较/

BeanFactory

BeanFactory,顾名思义是Bean工厂嘛,其实它是IOC容器的最核心的组件,与Bean相关的一些生产还有储存操作其实都是基于BeanFactory来进行的。比如说,BeanDefinition对象的储存,还有Bean实例相关的一级二级三级缓存的实现。其实都是基于BeanFactory来实现的,包括我们调用getBean方法获取到Bean实例,也是在它的一级缓存中去获取的嘛。而BeanFactory只是一个接口,比较常用的实现类有DefaultListableBeanFactory类,还有XmlBeanFactory类,它们都提供了与Bean相关的最基础的功能。ApplicationContext接口其实也是BeanFactory的一个子接口,它就对基础功能进行了拓展,比如对AOP的支持,Web,事件发布等功能。

FactoryBean

它其实是一个Bean,功能就是使得IOC容器中的Bean有了更丰富的实现,将这些Bean使用工厂模式进行包装。比如说我可以写一个类,这个类实现FactoryBean接口,实现getObject方法,这个方法是一个泛型方法,我们就可以在里面实现一些逻辑,然后返回对应的Bean。然后我们就可以将这个类注册为bean了。后续调用getBean方法,实际上返回的是FactoryBean的getObject方法的返回值。所以说FactoryBean本身是一个Bean,但是充当了一个工厂类的作用。所以说它为bean提供了更灵活的实现

发布了60 篇原创文章 · 获赞 7 · 访问量 3855

猜你喜欢

转载自blog.csdn.net/SCUTJAY/article/details/104934363