java - 不满意的依赖异常 : Requested bean is currently in creation unresolvable circular reference

标签 java spring junit mockito wiremock

我有一个源类显然破坏了集成测试。下面提供了代码。

@Configuration
@Import( EmailageConfiguration.class )
public class EmailageServiceConfiguration {

    private static final String EMAILAGE_ACCOUNT_ID_CONFIG_KEY = "emailage.key";
    private static final String EMAILAGE_API_KEY_CONFIG_KEY = "emailage.secret";

    private final EmailageConfigHolder holder;

    public EmailageServiceConfiguration( final EmailageConfigHolder holder ) {
        this.holder = holder;
    }

    @Bean
    public EmailageConfigHolder emailageConfigHolder( Environment env ) {

//        final EmailageConfigHolder holder = new EmailageConfigHolder();

        holder.setApiKey( env.getRequiredProperty( EMAILAGE_API_KEY_CONFIG_KEY ) );
        holder.setAccountId( env.getRequiredProperty( EMAILAGE_ACCOUNT_ID_CONFIG_KEY ) );

        return holder;
    }

}

提供IT测试,

public class EmailageServiceIT {

    private static final String EMAILAGE_RESPONSE_FILE = "emailage-response.json";

    private final static String EMAILAGE_ENDPOINT = "/emailage";

    private EmailageService service;

    @Rule
    public WireMockRule wireMockRule = new WireMockRule( wireMockConfig().dynamicPort() );

    @Before
    @SuppressWarnings( "resource" )
    public void setup() {
        int port = wireMockRule.port();

        System.setProperty( "emailage.uri", "http://localhost:" + port + EMAILAGE_ENDPOINT );
        System.setProperty( "emailage.key", "123" );
        System.setProperty( "emailage.secret", "123" );
        System.setProperty( "emailage.connection_timeout", "10000" );
        System.setProperty( "emailage.read_timeout", "10000" );
        System.setProperty( "kafka.bootstrap_servers", "localhost" );
        System.setProperty( "kafka.topic", "ella-test-topic" );

        ApplicationContext context = new AnnotationConfigApplicationContext( EmailageServiceConfiguration.class );
        service = context.getBean( EmailageService.class );
    }


 // .........................

}

当我运行maven命令时,我得到错误堆栈,

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'emailageServiceConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'emailageServiceConfiguration': Requested bean is currently in creation: Is there an unresolvable circular reference?
    at com.ratepay.ella.service.EmailageServiceIT.setup(EmailageServiceIT.java:64)
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'emailageServiceConfiguration': Requested bean is currently in creation: Is there an unresolvable circular reference?
    at com.ratepay.ella.service.EmailageServiceIT.setup(EmailageServiceIT.java:64)

所以,IT测试基本上打破了LOC,

ApplicationContext context = new AnnotationConfigApplicationContext( EmailageServiceConfiguration.class );

我还为问题添加了 EmailageConfigHolder 类,

@Getter
@Setter
public class EmailageConfigHolder {

    private String apiKey;
    private String accountId;

}

如何纠正它?

最佳答案

也许我的想法是错的,但是

EmailageServiceConfiguration负责Bean的创建EmailageConfigHolder(这不就是@Bean注解所表达的意思吗?

那么 spring 应该如何将它传递给应该创建它的对象的构造函数呢?这就是您的循环依赖最有可能源于的地方。

要修复此问题,请为您的 EmailageServiceConfiguration 创建一个独立的生产者。

关于java - 不满意的依赖异常 : Requested bean is currently in creation unresolvable circular reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751023/

相关文章:

java - 构造函数 this() 不必要吗?

java - 在字符串中检查字母或 0 的问题。[JAVA]

Android 奇怪的测试 fragment

java - JBoss Arquillian @InSequence 与 JUnit 4.12

java - 使用 Jackson 将 Guava Optional<Integer> 序列化为字符串

java - 使用 AffineTransformOp 过滤图像时 JVM 崩溃

java - Spring事务中requires_new和嵌套传播的区别

java - Spring REST 实现错误 404

java - AnnotationConfigApplicationContext 中的 Quartz 调度程序

junit - mockito 中的持续 stub 是什么以及我们在哪里使用它?