博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FactoryBean 创建过程
阅读量:2219 次
发布时间:2019-05-08

本文共 1553 字,大约阅读时间需要 5 分钟。

1.FactoryBean用途

       FactoryBean是一个工厂bean,自定义工厂bean时需要继承FactoryBean类

       FactoryBean代码如下

        

package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean
{ @Nullable T getObject() throws Exception; @Nullable Class
getObjectType(); default boolean isSingleton() { return true; }

  其中getObject()返回的就是bean

  mybatis-spring 项目中的SqlSessionFactoryBean就是实现的FactoryBean,

public class SqlSessionFactoryBean implements FactoryBean
, InitializingBean, ApplicationListener
@Override  public SqlSessionFactory getObject() throws Exception {    if (this.sqlSessionFactory == null) {      afterPropertiesSet();    }    return this.sqlSessionFactory;  }

 返回的是SqlSessionFactory示例对象

 当需要获取sqlSessionFactory对象时直接调用:

applicationContext.getBean("mobile")

 这里也可以获取SqlSessionFactoryBean对象,方法如下

applicationContext.getBean("&mobile")

 当上面的sqlSessionFactory定义是单例时:

会将得到的sqlSessionFactory放入factorybeanObjectCache集合中存放。

对spring有一些深入了解的人都知道,一般的单例对象都是存放在singletonObjects集合中。

为什么FactoryBean生成的单例object是存放在factorybeanObjectCache中呢?

2.FactoryBean实现类及getObject方法生成的对象存放位置

      FactoryBean实现类的bean存放在singletonObjects中,存放在的名称是在spring配置文件中定义的bean名称

所以当我们使用非“&”开头的时候从singletonObjects拿出是FactoryBean,这时会做一个特殊判断,

判断用户需要获取的bean是bean对象还是工厂bean本身(实现了FactoryBean的类),如果是前者,用singletonObjects拿出来

的对象是继承了FactoryBean,所以不对,这时候会从factorybeanObjectCache获取缓存,如果缓存获取不到则将从

singletonObjects”获取到的bean强转成FactoryBean,调用它的getObject方法,再放入缓存。如果是后者则直接返回。

3.FactoryBean实现类的bean实例是什么时候生成的并放入缓存的

       spring非懒加载的单例对象,一般是在调用refresh()方法时完成bean的初始化

转载地址:http://ctdfb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
机器学习算法应用中常用技巧-2
查看>>