Spring的BeanFactory和FactoryBean

作者: 一字马胡
转载标志 【2017-11-03】

更新日志

日期 更新内容 备注
2017-11-03 添加转载标志 持续更新

BeanFactory

beanFactory是一个Factory,用于管理bean的,有了一个Spring的beanFactory,我们就可以从spring中
获取注册到其中的bean来使用了。下图展示了BeanFactory提供的方法。

Spring的BeanFactory和FactoryBean_第1张图片
BeanFactory

BeanFactory中一个比较常用的继承接口是ListableBeanFactory,ListableBeanFactory接口继承了BeanFactory接口
并提供了一些使用的方法,下面展示了ListableBeanFactory的类图关系:

Spring的BeanFactory和FactoryBean_第2张图片
ListableBeanFactory

我们比较关心和用的比较多的BeanFactory的子类是ClassPathXmlApplicationContext,这是ApplicationContext接口的
一个子类,ClassPathXmlApplicationContext从xml的配置文件中获取bean并且管理他们,你只需要通过ClassPathXmlApplicationContext
就可以获取使用所有配置文件中的bean。

FactoryBean

FactoryBean是一个Bean,实现了FactoryBean接口的类有能力改变bean,FactoryBean希望你实现了它之后返回一些内容,Spring会按照这些内容
去注册bean,下面展示了FactoryBean提供的接口方法,需要注意的是,在Spring中为我们实现了大量的FactoryBean,所以可以看出FactoryBean是
非常重要的。

Spring的BeanFactory和FactoryBean_第3张图片
FactoryBean

可以看到,FactoryBean非常简单,三个方法的意义非常明确,getObject希望你返回需要注册到Spring容器中去的bean实体,getObjectType希望你返回
你注册的这个Object的具体类型,isSingleton方法希望你返回这个bean是不是单例的,如果是,那么Spring容器全局将只保持一个该实例对象,否则每次getBean都将获取到一个新的该实例对象。

FactoryBean的功能貌似更像是一种代理,有一种场景是,我们使用一个通用的类来在xml文件中注册bean,我们希望通过该通用bean产生一个我们希望的bean,而这个需求FactoryBean就可以办到,你只需要拦截你需要代理的bean,然后转换成你希望的bean再注册。一个应用场景就是Rpc服务器端的bean注册,以及Rpc客户端的服务调用,都可以通过一个第三方bean来产生我们真正需要的bean。

Spring的BeanFactory和FactoryBean_第4张图片
扫码入群

你可能感兴趣的:(Spring的BeanFactory和FactoryBean)