首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Micronaut循环依赖

Micronaut循环依赖
EN

Stack Overflow用户
提问于 2019-09-13 01:59:17
回答 1查看 763关注 0票数 0

如何在micronaut中解决循环依赖,我指的是链接javax.inject.Inject

A.java

代码语言:javascript
复制
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
@Singleton
public class A {
    @Inject
    private Provider<B> b;
}

B.java

代码语言:javascript
复制
import javax.inject.Inject;
import javax.inject.Provider;
import javax.inject.Singleton;
@Singleton
public class B {
    @Inject
    private Provider<A> a;
}

Factory.java

代码语言:javascript
复制
import io.micronaut.context.annotation.Factory;
import javax.inject.Inject;
import javax.inject.Singleton;
@Factory
public class Factory {

    @Inject
    private A a;

    @Inject
    private B b;
}

例外:

代码语言:javascript
复制
23:22:04.354 [nioEventLoopGroup-1-5] DEBUG i.m.h.s.netty.RoutingInBoundHandler:1357-Encoding emitted response object [Internal Server Error: Failed to inject value for parameter [b] of class: B

Message: Circular dependency detected
Path Taken: 
Factory.a --> new A([B b]) --> new B([A a])
^                                                                                                                                                                                                                                                                                                                 |                                   |
+----------------------------------+] using codec: io.micronaut.jackson.codec.JsonMediaTypeCodec@35a578
EN

回答 1

Stack Overflow用户

发布于 2019-09-13 02:11:40

从根本上说,这可能是您的设计存在问题。如果AB都需要彼此的引用,那么它们的耦合太紧密了。它们可能只是一个类。

无论如何,问题是框架不知道首先创建哪一个。它处于第22条军规的情况下;没有A就不能创建A,没有A就不能创建B。

我相信如果你用setter注入一个引用,那么就意味着你可以在另一个引用之前构造一个引用,但在初始化过程中会有一小段时间B.a为空。可能无关紧要。

代码语言:javascript
复制
@Singleton
public class B {
    private Provider<A> a;

    @Inject
    public void setA(Provider<A> a) {
        this.a = a;
    }
}

但是修改你的设计!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57912219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档