Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在测试配置中使用相同的bean,但使用不同的属性?_Java_Spring_Spring Amqp_Spring Rabbit - Fatal编程技术网

Java 如何在测试配置中使用相同的bean,但使用不同的属性?

Java 如何在测试配置中使用相同的bean,但使用不同的属性?,java,spring,spring-amqp,spring-rabbit,Java,Spring,Spring Amqp,Spring Rabbit,我有单独的配置类,每个Spring概要文件创建不同的bean。我希望我的测试尽可能地模拟生产代码,因此我希望使用在Spring'PROD'概要文件下创建的相同的bean,但添加/更新专门用于测试的不同属性。实现这一目标的最佳方式是什么 举例说明我的意思: @Profile(PROD) public class ProdConfig { @Bean public SimpleRabbitListenerContainerFactory containerFactory() {

我有单独的配置类,每个
Spring概要文件创建不同的bean。我希望我的测试尽可能地模拟生产代码,因此我希望使用在
Spring'PROD'概要文件下创建的相同的bean,但添加/更新专门用于测试的不同属性。实现这一目标的最佳方式是什么

举例说明我的意思:

@Profile(PROD)
public class ProdConfig {
    @Bean
    public SimpleRabbitListenerContainerFactory containerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMaxConcurrentConsumers(2);
        ...
        return factory;
    }
}

@Profile(TEST)
public class TestConfig {
    @Bean
    public SimpleRabbitListenerContainerFactory containerFactory() {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMaxConcurrentConsumers(2);
        ...
        /**
            The advice chain should only set for testing purposes
        **/
        factory.setAdviceChain(interceptor());
        return factory;
    }

    @Bean
    RetryOperationsInterceptor interceptor() {
        ...
    }
}

理想情况下,我不想在
TestConfig
中复制代码来设置
SimpleRableBitListenerContainerFactory
的各种属性。我只想加载ProdConfig,但调用
setAdviceChain(interceptor())

尝试以下方法:

@Import(ProdConfig.class)
public class TestConfig {

    @Autowired
    private SimpleRabbitListenerContainerFactory containerFactory;

    @Bean
    RetryOperationsInterceptor interceptor() {
        ...

        this.containerFactory.setAdviceChain(interceptor);

        return interceptor;
    }

}