Spring - FactoryBean

1,FactoryBean介绍

1)定义
如果一个bean实现了FactoryBean接口,它被作为工厂bean去暴露,而不是它本身。
If a bean implements this interface, it is used as a factory for an object to expose, not directly as a bean instance that will be exposed itself

image.png

2)FactoryBean会向容器中注册两个Bean:一个是它本身,一个是FactoryBean.getObject()方法返回值所代表的Bean。
3)对比BeanFactory:BeanFactory是bean容器,完成bean的创建、装配等
FactoryBean是一个特殊的bean,用于创建bean的bean
4)FactoryBean作为spring的扩展点,bean的加载每次返回bean实例前,都会使用getObjectForBeanInstance来处理FactoryBean。
image.png

image.png

image.png

image.png

2,FactoryBean应用 - dubbo消费端proxy生成

1)dubbo:reference配置

image.png

2)使用从AbstractApplicationContext容器中getBean,应用spring FactoryBean加载机制,调用ReferenceBean实现了ReferenceBean接口的getObject方法
image.png

image.png

3)创建proxy返回bean


image.png

3,FactoryBean应用 - mybatis-spring插件

1)配置SqlSessionFactoryBean

image.png

2)SqlSessionFactoryBean继承了FactoryBean,重写了getObject方法
image.png

buildSqlSessionFactory()方法会根据mybatis的配置进行初始化
image.png

3)MapperScan中MapperFactoryBean,使用FactoryBean
image.png

MapperScannerRegistrar 将定义的Mapper解析为BeanDefinition,设置beanClass属性为MapperFactoryBean
image.png

image.png

4)MapperFactoryBean获取mapper
每一个
image.png

image.png

调用JDK的动态代理
image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。