Spring: FactoryBean相对于BeanFactory有啥好处?
FactoryBean理解上比较绕
那么这种概念,在软件工程上
或者说在平时使用上
相对于BeanFactory有啥好处?
为何要有这么个设计模式?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
FactoryBean理解上比较绕
那么这种概念,在软件工程上
或者说在平时使用上
相对于BeanFactory有啥好处?
为何要有这么个设计模式?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
BeanFactory是Spring中IOC容器最核心的接口,遵循了IOC容器中所需的基本接口。例如我们很常见的:ApplicationContext,XmlBeanFactory 等等都使用了BeanFactory这个接口。
FactoryBean是工厂类接口,当你只是想简单的去构造Bean,不希望实现原有大量的方法。它是一个Bean,不过这个Bean能够做为工厂去创建Bean,同时还能修饰对象的生成。
总结:FactoryBean比BeanFactory在生产Bean的时候灵活,还能修饰对象,带有工厂模式和装饰模式的设计思想在里面,不过它的存在还是以Bean的形式存在。
直接看MyBatis的SqlSessionFactoryBean就明白了
Spring会调用SqlSessionFactoryBean这个实现了FactoryBean的工厂Bean 同时加载dataSource,Mapper文件的路径,对sqlSessionFactory进行初始化(这里就不贴源码了 源码看一下)
BeanFactory因为是核心接口,编写复杂逻辑很容易接触到其他不必要的接口,不好实现。
如果是FactoryBean就简单很多,SqlSessionFactoryBean这个工厂Bean生产不同数据源的sqlSessionFactory,同时加载相应的配置信息。
两者不是用在同一个地方的,所以不具有相互替代性,也不具有可比性,就好比桌子腿跟勺子。你把spring框架看成一张餐桌,BeanFactory好比桌子腿,属于框架的一部分,而FactoryBean是在框架内根据业务需要来的,你喝汤可以用勺子,夹菜可以用筷子,但勺子和筷子都不能代替桌腿。
上面苏生老师的回答已经很好了,
我分享一篇分析Spring框架原理文章,Spring框架的设计理念与设计模式分析
有一段比喻我觉得非常恰当,
Spring是以Bean为核心的,一般都是根据BeanDefinition生成期望的Bean,那么FactoryBean在BeanDefinition和最终的Bean中间,一部分灵活性交给配置(xml或JavaConfig),一部分定制逻辑交给继承FactoryBean的子类的getObject方法;关于它的好处,比如整合第三方框架,比如定制工厂逻辑,如池化,没有FactoryBean的辅助,从raw BeanDefinition生成Bean实现起来可能就比较复杂了;
以上是关于FactoryBean的一点心得,它和BeanFactory不是一回事;
BeanFactory是一个容器,它的工厂逻辑是利用原材料BeanDefinition生成Bean,在目的上和FactoryBean有相似之处,明显它的定制性特点就不如FactoryBean了。