当前位置: 首页 > news >正文

北京java培训机构十大排名杭州seo泽成

北京java培训机构十大排名,杭州seo泽成,推广网站平台有哪些,宁波哪家建网站hao1.什么是Bean的循环依赖? 简单来说就是在A类中,初始化A时需要用到B对象,而在B类中,初始化B时需要用到A对象,这种状况下在Spring中,如果A和B同时初始化,A,B同时都需要对方的资源&…

1.什么是Bean的循环依赖?

        简单来说就是在A类中,初始化A时需要用到B对象,而在B类中,初始化B时需要用到A对象,这种状况下在Spring中,如果A和B同时初始化,A,B同时都需要对方的资源,就会僵持不下。这也就是Spring中的循环依赖问题。Spring框架对这种属性所产生的循环依赖的解决办法很简单,就是使用@Autowired注解,如下:

public class BeanA {@Autowiredprivate BeanB beanB;
}public class BeanB {@Autowiredprivate BeanA beanA;
}

        对于构造方法的循环依赖,Spring可采用@Lazy或者使用Setter()方法去解决,这里我们不做讨论。

2.@Autowired

        在Spring中,我们可以使用@Autowired注解对属性或者方法参数进行标注,会从IOC容器中拿到对应的实例自动注入。

3.解决循环依赖的具体细节

        首先,Spring中内部有三大缓存,在 DefaultSingletonBeanRegistry 类中定义了 3 个 Map 对象充当缓存。分别是:

  • singletonObjects:一级缓存,用于保存实例化,初始化完成之后的Bean实例,ConcurrentHashMap存储,线程安全。
  • earlysingletonObjects:二级缓存,用于保存实例化完成,还未初始化完的Bean实例,属于提前暴露。
  • singleFactories:三级缓存,存放生成Bean的工厂,也相当是存放了获取Bean的一个回调方式。

        具体实现:

先把创建A的工厂,存入到三级缓存中,之后A进行实例化,实例化之后需要属性赋值B, 然后再一级、二级、三级缓存中找B,如果都没有,将创建B的工厂存入到三级缓存,之后B进行实例化,B实例化后需要属性赋值A,所以就去三级缓存中利用创建A的工厂回调拿到A,之后B的属性赋值完毕,然后将拿到的A存放到二级缓存中,并删除三级缓存中A的工厂,等到B整体初始化完毕,将B放入一级缓存,然后A的属性赋值B也完成,等到A整体初始化完毕,则将A存放到一级缓存中,并删除二级缓存的A。

        

http://www.hengruixuexiao.com/news/27120.html

相关文章:

  • 福建住房与城乡建设部网站百度分析工具
  • 商业网站开发设计实训总结佛山seo优化
  • 深圳网站建设与推广原画培训机构哪里好
  • 机加工如何用网站开发客户关键词排名优化公司
  • 学院的网站建设的意义巢湖网站制作
  • 自己的网站建设墨子学院seo
  • 在线音乐网站开发摘要刷推广链接人数的软件
  • 网站效果营销与销售的区别
  • 网站开发好找工作吗项目营销推广方案
  • 网站 颜色标准宁波seo软件
  • 英语网站开发的背景360搜索引擎网址
  • 网站制作公司北京今日热点新闻事件
  • 毕业设计 网站开发百度一下百度搜索
  • 用.net做的网站吗南宁网站建设网络公司
  • 东莞网站建设 餐饮短视频广告投放平台
  • 徐州做网站的公司哪些好谷歌推广教程
  • 开发一个网站要多久东莞搜索网络优化
  • js建设网站国际新闻头条今日要闻
  • 上海做设计公司网站关键词密度
  • 网站后台 bootstrap网络营销最火的案例
  • 厦门网站建设阳哥百度安装应用
  • 好看的静态网站网页设计培训
  • 自己做网站需要钱吗seo美式
  • 网站维护很难吗推广网站源码
  • 清美未来广告设计公司天津搜狗seo推广
  • 温岭哪里有做网站的互联网营销师考试
  • 做报名统计的网站杭州seo专员
  • 做网站包括服务器么如何制作网站和网页
  • 简约网站设计欣赏蔡甸seo排名公司
  • 网站根目录在哪儿济南做网站推广哪家好