2016 - 2024

感恩一路有你

spring 初始化顺序 spring如何理解循环依赖?

浏览量:2808 时间:2023-05-02 16:42:51 作者:采采

spring如何理解循环依赖?

循环依赖就是停止循环引用,就是两个或多个Bean相互之间的所属对方,比方CircularityA引用CircularityB,CircularityB脚注CircularityC,CircularityC直接引用CircularityA。不能形成一个环状引用关系。

在建议使用Spring时,如果没有要注意按结构实现构造器的依赖注入,则肯定会碰到循环依赖的情况,简单而言应该是BeanA的构造器依赖于BeanB,BeanB的构造器又依恋于BeanA。

这时候运行测试3都会才发现掷下了BeanCurrentlyInCreationException十分。再产生状况的原因是,Spring在创建战队Bean时,会简单类的对象对象,然后把再涌入依赖。举例Spring简单创建角色Class A,那么都会发现在构造器里有ClassB的依赖,所以都会转去修改ClassB,又在ClassB的构造器里发现到了对Class A的依赖,而此时Class A是还未系统初始化完的,并且又会转去修改Class A。

换成基于setter的依赖注入即可可以解决这个问题。是因为基于setter的依赖注入会简单的方法动态创建设置构造函数来静态方法对象,然后再内部函数setter基于依赖注入。那样的话在对象实例化的阶段就没有了任何依赖,并且Class A构造器成功后再动态链接库ClassB,ClassB构造器结束后又开始设值,而这时Class A早是构造器能够完成了的,所以也可以成功语句到Class A。

springboot是哪个公司的?

springboot是由pivotal团队提供给的框架,主要是用于简化后spring应用中的初始化堆建以及各种配置与开发过程。该框架可以使用了特定的事件的来参与配置,最大限度地使开发人员不再继续是需要符号表示样板化的配置文件,哪个网站的稳定啊版本是于2021年1月份查找的2.5.3版本。

springboot怎么注入@configuration类?

springboot核心注解@EnableAutoConfiguration会导入@Import(),这个类实现程序了DeferredImportSelector接口,即可以不提升spring能够完成bean的初始化之后会回调下跌该接口的selectImports方法,方法的参数是各个bean的类属性,注解等,前往的bean才会导入到spring中。AutoConfigurationImportSelector实现方法逻辑不胜感激:

该方法逻辑确切那就是读取各个jar包下的spring.factories配置文件,读取出手动配置的类,然后去掉再重复一遍的和需要首先排除的,然后再参与过滤,即filter方法,该方法::

重点看第一个for循环,getAutoConfigurationImportFilters()会前往所有AutoConfigurationImportFilter的利用类,目前仅有OnClassCondition这个类利用了该接口,即直接返回的全是OnClassCondition类的对象,而OnClassCondition继承自SpringBootCondition,match会参照条件过滤杂质掉不符合申请条件的配置类,留下符合条件的配置类,最终达到被AutoConfigurationImportSelector汇聚spring结束运行程序。这里说再看看match方法是应该怎么处理ConditionOnClass注解的,看实现程序,其中的getOutcomes方法实现方法,其中可以使用createOutcomesResolver方法创建战队了2个OutcomesResolver,需要注意的是,带走了一半的解析任务放在旁边新开线程中实现以获得更好的性能,这里主要注意看StandardOutcomesResolver的实现,不对应的实现程序方法:

可以看见读取文件了类上面的ConditionalOnClass注解的值,后再和环境中并且不兼容,如果必然就返回ConditionOutcome对象,存在地回空。当经过这些过滤,终于由上面说的AutoConfigurationImportSelector类回后被spring读取从而实现方法了条件注解的配置功能。

至于@configuration类会在ConfigurationClassPostProcessor中并且处理,一些其他类型的@Condition条件判断等,如OnJavaCondition注解等,会在这里一次性处理,这里不展开。

方法 对象 配置 构造器

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。