当我使用Optional类型并运行SpringJUnit4ClassRunner Test时,@ Bean不会被注入

时间:2018-12-24 11:41:51

标签: java spring junit

当我在Spring中运行SpringJUnit4ClassRunner Test时,我从@Bean @Autowired值。

但是问题是我们正在使用多个Configures来设置@Bean,如下所示

@Configuration
public class ParentConfig {
    @Bean
    public Optional<Integer> sampleOptionalInteger(@Value("${sample.int:}") final Integer sample) {
        return Optional.of(sample);
    }
}

使用parentConfig的子配置为

@Profile("sample")
@Import({
        ParentConfig.class,
})
@Configuration
public class ChildConfig {
    @Bean
    public Integer sampleInt(final Optional<Integer> sampleOptionalInteger) {
        return sampleOptionalInteger.map(s -> s).orElseThrow(() -> new IllegalArgumentException("You need to specify sample int"));
    }
}

测试代码为

@ActiveProfiles("sample")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        ChildConfig.class,
})
@TestPropertySource(locations = {
        "sample.properties"
})
public class SampleConfigTest {
    @Autowired
    private Integer sampleInt;
}

当我调试执行测试代码时,在ParentConfig的参数sampleOptionalInteger中,我们可以从属性中获取整数(可以通过在断点处暂停来确认)。 但是我们无法在ChildConfig的参数sampleInt中获得该值,结果就是Optional.empty

我不知道为什么会这样。有人可以解释这里发生了什么吗?

0 个答案:

没有答案