Java 如何在Spring引导测试中直接自动连接父应用程序上下文?

Java 如何在Spring引导测试中直接自动连接父应用程序上下文?,java,spring,spring-boot,spring-cloud,spring-boot-test,Java,Spring,Spring Boot,Spring Cloud,Spring Boot Test,我想在Spring引导测试中自动连接直接属于该父上下文的父应用程序上下文或ConfigurableListableBeanFactory。就我而言 我使用的是Spring引导云,因此我的应用程序上下文的父应用程序上下文是bootstrapcontext。我想要它的原因是检查在自定义引导配置中定义的bean是否在bootstrap上下文中正确分配 渐变依赖性: implementation group: 'org.springframework.cloud', name: 'spring-clou

我想在Spring引导测试中自动连接直接属于该父上下文的父应用程序上下文或
ConfigurableListableBeanFactory
。就我而言 我使用的是Spring引导云,因此我的应用程序上下文的父应用程序上下文是
bootstrap
context。我想要它的原因是检查在自定义引导配置中定义的bean是否在
bootstrap
上下文中正确分配

渐变依赖性:

implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '2.2.5.RELEASE'
我要检查的示例bean:

public class TestBean {
}
我的自定义引导配置:

@Configuration
public class MyBootstrapAutoconfiguration {
  @Bean
  public TestBean myBean() {
    return new TestBean();
  }
}
spring.factories

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  com.example.demo.MyBootstrapAutoconfiguration
样本测试:

@SpringBootTest(classes = MyBootstrapAutoconfigurationTest.TestConfiguration.class)
class MyBootstrapAutoconfigurationTest {

  @Autowired
  private ApplicationContext applicationContext;

  @Autowired
  private ConfigurableListableBeanFactory configurableListableBeanFactory;

  @Test
  void test() {
    String[] beansFromAppContext = applicationContext.getBeanNamesForType(TestBean.class);
    String[] beansFromBootstrapContext = applicationContext.getParent().getBeanNamesForType(TestBean.class);
    String[] beansFromAppBeanFactory = configurableListableBeanFactory.getBeanNamesForType(TestBean.class);

    System.out.println(beansFromAppContext.length);
    System.out.println(beansFromBootstrapContext.length);
    System.out.println(beansFromAppBeanFactory.length);
  }

  @Configuration
  @EnableAutoConfiguration
  static class TestConfiguration {

  }
}
输出为:

0
1
0
问题是:

是否可以在Spring Boot Test中自动连接直接属于它的父级-
bootstrap
应用程序上下文或
ConfigurableListableBeanFactory
?我想避免调用
getParent


同样奇怪的是,我无法通过子应用程序上下文在
bootstrap
应用程序上下文中找到定义的bean-这是所需的行为吗?

不,您必须调用
getParent()