当前位置: 首页 > 知识库问答 >
问题:

随机出现Spring boot交叉引用问题

申屠无尘
2023-03-14

在构建Spring boot项目时,我遇到了一个循环依赖(交叉引用)问题,依赖趋势如下:

  • 处理器类通过构造函数注入自动连线条件类;
  • 条件类通过构造函数注入自动连线CacheManager;
  • CAHCEManager类通过setter注入自动连线RuleSet类;
  • 规则集类通过构造函数注入再次自动连线处理器。
The dependencies of some of the beans in the application context form a cycle:
   app
┌─────┐
|  XXXProcessor defined in file ...
↑     ↓
|  XXXCriteria defined in file ...
↑     ↓
|  XXXCacheManager
↑     ↓
|  XXXRuleSet defined in file ...
└─────┘

虽然我可以努力从RuleSet类中移除处理器的依赖关系,但我想知道是否有一种方法可以保留当前的引用,但仍然可以消除这里提出的交叉引用问题?我查阅了这个论坛,有人建议@lazy注释可能会有帮助。我尝试将它应用于处理器类或规则集类(在类级别或方法级别),但问题没有解决。

另一个观察是,上面引用的错误并不是一直出现的--有时程序进行得很好,是错误随机出现,使我感到困扰。那是为什么呢?

共有1个答案

高鸿振
2023-03-14

解决此问题的一种方法是用提供程序替换一个实例,如下所示:

public Processor(Provider<Criteria> criteria) {
    this.criteria = criteria;
}

那么在使用它时,您需要首先get()它。

Criteria c = this.criteria.get();

这意味着处理器可以在标准之前构造,因为注入的提供程序一旦准备就绪就会获得标准bean。

@lazy仅仅意味着Spring应该等待初始化一个bean,直到它被实际请求为止,而不是在启动时急切地创建它(这是标准行为)。这对循环依赖项和注入到其他bean构造函数中的bean都没有影响。对于初始化速度非常慢并且几乎总是必须从provider中使用的bean来说,它非常有用,以实际推迟初始化。

 类似资料:
  • 我想调用另一个文件中声明的变量。文件的包含是使用交叉引用完成的。同时也宣告了世界的召唤。这是语法: 声明是规则。 从文档中我了解到我必须在中做些什么,但我不知道具体是什么 编辑

  • 交易随机数nonce nonce是一个不断增长的数值,用来唯一地标识交易。一个nonce只能使用一次,直到交易被挖掘完成,可以以相同的随机数发送交易的多个版本,但是一旦其中一个被挖掘完成,其他后续提交的都将被拒绝。 可以通过eth_getTransactionCount方法获得下一个可用的nonce: EthGetTransactionCount ethGetTransactionCount =

  • 我有一个相对简单的任务要在R中完成:我有两个多边形层,一个“面片”层包含39个焦点多边形,另一个“土地覆盖”层包含一个焦点土地覆盖类型的多多边形。我需要剪裁这两个图层,以便在焦点多边形中仅保留焦点土地覆盖类型的范围。有时,这适用于sf::st\U交叉口,有时适用于sf::st\U差异和“负”土地覆盖层(包含所有非焦点土地覆盖类型的范围),有时两种方法都不起作用。起初,我认为这些不同的行为取决于地形

  • Backend-URL=http://localhost:8080 Frontend-URL=http://localhost:8081 在main.js文件中,我为Axios添加了以下默认值: 在后端站点上,我添加了以下条目:

  • 问题内容: 是否有 markdown 语法等效于: 问题答案: Take me to pookie 应该是正确的markdown语法,以跳转到名为pookie的锚点。 要插入该名称的锚点,请使用HTML: Markdown似乎不介意将锚点放在哪里。标头中有用的地方。例如: 效果很好。(我在这里进行了演示,但是SO的渲染器去除了锚点。) 注意自我结束标记和对 本文的早期版本建议使用,对XHTML使用

  • 在本机映像中构建quarkus optaplanner应用程序时,我遇到此“Random/SplittableRandom”错误: 我搜索,有这篇文章与randoms原生图像,但我仍然不知道我需要做什么来解决这个问题。 似乎quarkus试图为drools类创建Random或SplittableRandom的实例,我使用optaplanner quarkus,我不使用drools规则引擎,我使用约