如何监视引导上下文bean

时间:2018-12-18 06:39:05

标签: java spring spring-boot

我正在使用spring.factories设置引导上下文

org.springframework.cloud.bootstrap.BootstrapConfiguration = sompePackage.MyBootstrapConfiguration

我一直在关注此链接中提到的内容 https://cloud.spring.io/spring-cloud-commons/multi/multi__spring_cloud_context_application_context_services.html

我注意到两件事希望您能为我提供帮助

1-我无法监视通过引导上下文创建的任何bean,换句话说,如果我在MyBootstrapConfiguration中创建类型为x的bean,则无法使用@SpyBean监视该bean,就可以监视所有其他豆,但是引导上下文的豆(我正在使用springboottest)

2-如果我在某个地方注入ApplicationContext并打印所有定义的bean,则看不到在引导上下文中创建的bean,换句话说,在MyBootstrapConfig中创建的bean x不存在。但是,@ Autowired可以正常工作,并且可以正确注入bean。

我的问题是: 1-我如何监视或模拟引导上下文bean? 2-如果我在ApplicationContext中找不到这些bean,它们在哪里?

谢谢

2 个答案:

答案 0 :(得分:0)

尝试将断点放在创建bean的位置并以调试模式运行,然后您将查找是否已创建bean

答案 1 :(得分:0)

您可以为要运行的测试范围定义自己的上下文:

这看起来像:

public class TestApplicationContext implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(final ApplicationContext context) throws 
  BeansException {
    TestApplicationContext.context = context;
}

public static Object getBean(final String beanName) {
    return context.getBean(beanName);
   }
}

然后,您可以在带有@Configuration注释的类中为上下文创建一个bean。

@Bean
public TestApplicationContext testApplicationContext() {
    return new TestApplicationContext();
}

然后,您可以通过以下简单的方法轻松引用所需的任何bean:

 TestApplicationContext.getBean("someBean");