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
2)FactoryBean会向容器中注册两个Bean:一个是它本身,一个是FactoryBean.getObject()方法返回值所代表的Bean。
3)对比BeanFactory:BeanFactory是bean容器,完成bean的创建、装配等
FactoryBean是一个特殊的bean,用于创建bean的bean
4)FactoryBean作为spring的扩展点,bean的加载每次返回bean实例前,都会使用getObjectForBeanInstance来处理FactoryBean。
2,FactoryBean应用 - dubbo消费端proxy生成
1)dubbo:reference配置
2)使用从AbstractApplicationContext容器中getBean,应用spring FactoryBean加载机制,调用ReferenceBean实现了ReferenceBean接口
的getObject方法
3)创建proxy返回bean
3,FactoryBean应用 - mybatis-spring插件
1)配置SqlSessionFactoryBean
2)SqlSessionFactoryBean继承了FactoryBean,重写了getObject方法
buildSqlSessionFactory()方法会根据mybatis的配置进行初始化
3)MapperScan中MapperFactoryBean,使用FactoryBean
MapperScannerRegistrar 将定义的Mapper解析为BeanDefinition,设置beanClass属性为MapperFactoryBean
4)MapperFactoryBean获取mapper
每一个
调用JDK的动态代理