spring源码怎么看 数据仓库用hive还是hbase

一、基础知识储备1。春之豆注入法a)构造函数注入@Service public class BeanOne { //注入对象BeanTwo private BeanTwo bt; //构造器 public BeanOne(BeanTwo bt) { this.bt = bt ; } } @Service public class BeanTwo { public BeanTwo(BeanOne bo) { ...... ...... } }总结:...

一、基础知识储备

1。春之豆注入法

a)构造函数注入

@Service public class BeanOne { //注入对象BeanTwo private BeanTwo bt; //构造器 public BeanOne(BeanTwo bt) { this.bt = bt ; } } @Service public class BeanTwo { public BeanTwo(BeanOne bo) { ...... ...... } }

总结:构造函数注入方法。Spring无法解决这种注入方法的循环依赖。当项目启动时,此方法将引发异常(
beancourrentincreationexception)。至于为什么解决不了,我暂时不解释,后面会解释。

b)。Setter模式单实例注入

@Service public class BeanOne { //注入对象BeanTwo private BeanTwo bt; //一定要写被注入对象的set方法 public void setBeanTwo(BeanTwo bt) { this.bt = bt; } } @Service public class BeanTwo { ...... ......}

总结:这个方法也会造成循环依赖,但是Spring会在初始化的时候处理,解决循环依赖问题。

c)。单一模式字段属性注入循环依赖(默认模式)

相信大家写代码的时候都会用到这种写法:

@Servicepublic class AServiceImpl implements AService { @Autowired private BService bService; ...}@Servicepublic class BServiceImpl implements BService { @Autowired private AService aService; ...}

总结:属性注入方法实际上类似于Setter注入方法。Spring会在bean初始化的时候解决,但是两次注入还是有区别的。

2。三种注射方法的区别

属性注入不能有效指明依赖

相信很多人都遇到过一个bug,依赖注入的对象为null,启动依赖容器时遇到的问题是配置的依赖注入缺少一个注释什么的。

这种方式过于依赖注射容器。当整个依赖容器没有启动的时候,这个类就无法运行,也无法提供这个类在反射时需要的依赖。

依赖注入的核心思想之一就是容器管理的类不应该依赖于容器管理的依赖。用白话来说,如果类使用依赖注入类,那么这个类必须能够在没有这些依赖的情况下正常运行。但是,使用变量喷射并不能保证这一点。

而如果是采用构造器注入或者set注入,就可以避免以上问题:

使用set方式时,这是一种选择注入,可有可无,即使没有注入这个依赖,那么也不会影响整个类的运行。使用构造器方式时已经显式注明必须强制注入。通过强制指明依赖注入来保证这个类的运行

2。循环依赖项

循环依赖:顾名思义,就是n个类的循环(嵌套)引用。

一般来说,n个Bean相互参照,最终形成一个闭环。用一个经典的插画,可以这样表达(A、B、C都代表对象,虚线代表引用关系):

二、Spring如何解决单列循环依赖?

首先Spring内部维护了三个***p,也就是我们通常所说的电影缓存

在Spring的DefaultSingletonBeanRegistry类中,您会发现上面定义的三个映射:

singletonObjects(一级缓存),称“

单例池

”“

容器

”,存储完整的单例Bean的地方。singletonFactories(二级缓存) 存放原始的 bean 对象(尚未填充属性),用于解决循环依赖earlySingletonObjects(电影缓存) 映射Bean的

早期

引用,也就是说在这个Map里的Bean不是完整的,甚至还不能称之为“

Bean

”,只是一个实例化

Instance

.

1.bean创建过程

2。关键代码分析

在创建bean之前获取它,getSingleton()

先从一级缓存singletonObjects中去获取。如果获取不到或者对象正在创建中(isSingletonCurrentlyInCreation()),那就再从二级缓存earlySingletonObjects中获取。如果还是获取不到,且允许singletonFactories(allowEarlyReference=true)通过getObject()获取。就从电影缓存singletonFactory.getObject()获取。(如果获取到了就从singletonFactories中移除,并且放进earlySingletonObjects。其实也就是从***缓存移动到了二级缓存

未完待续。。。

本文来自年轻人玩的就是心跳投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/603216.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 06-23
下一篇 06-23

相关推荐

  • 怎么将iphone投屏到电脑 苹果手机投屏电脑直播教程

    我们知道,iPhone或iPad可以很容易地将设备的屏幕内容投影到MAC电脑的屏幕上。同样,IOS设备也可以通过屏幕镜像功能将屏幕内容投影到支持投影的电视上,但我们无法将iPhone或iPad的屏幕直接投影到Windows设备上。如果能做到这个功能,那么我们演示PPT、玩游戏、演示应用或者查

    2023-10-25 16:11:47
    1009 0
  • wps怎么打字打不上去详细介绍

    可能是字体设置为白色,打开WPS2019,打开WPS text,点击“开始”选项,点击字体设置选项右下角的箭头图标,进入字体设置页面,找到字体颜色,选择黑色。如果表单无法输入文本,单元格可能被保护,打开WPS表单,单击“审阅”;当您将插入模式更改为重写模式时,您可以打开文档

    2023-07-29 11:19:01
    1053 0
  • 肯德基在线点餐如何看取餐码(去肯德基怎么点餐)

    餐饮消费是老年人接触新消费、体验互联网时代的重要窗口。餐饮品牌应该怎么做才能更好的服务老年人?吃炸鸡喝奶茶“银发族”餐饮受关注。美团发布的《2021银发经济《食品消费洞察》报告显示,50岁以上中老年消费者增速连续四年第一。与此同时,小吃和快餐炸鸡奶茶,中老年人餐

    2023-07-29 10:56:01
    930 0
  • 腾讯桌面整理怎么自启动

    打开电脑管家,点击工具箱,找到“桌面整理”如图所示桌面整理软件上显示“初始化”这个时候其实是在下载程序,根据你的网速可能需要等待12分钟初始化完成后,在桌面上就可以看到如下图所示的一个可爱的小图标,右键桌面。1首先桌面的腾讯视频的图标,双击打开应用程序2 双击

    2023-07-29 10:55:01
    602 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信