检查哪些bean已在Spring上下文中加载

8

我在测试和部署过程中遇到了一系列奇怪的错误。它们似乎表明我的一些bean没有加载到上下文中,尽管它们在applicationContext.xml中被定义。

在测试期间有没有办法检查哪些bean实际上已经被加载了?或者找到运行时加载的完整bean列表?

谢谢, b

2个回答

6

在启动时,Spring会以info级别记录上下文中加载的所有bean的名称。或者在代码中,您可以使用getBeanDefinitionNames()方法获取所有bean的名称。


我觉得这很容易,现在去尝试一下,谢谢! - Brian Dolan
3
这对那些需要它的测试非常有用:'@'Autowired ApplicationContext applicationContext;'@'Test public void testContext() { String[] beans = applicationContext.getBeanDefinitionNames(); for (String b : beans) { System.out.println(" *** " + b); }} - Brian Dolan

0
如果有多个上下文,比如你正在使用 Spring MVC,你可以使用更强大的东西,像这样。
public class SampleContextApplicationListener implements ApplicationListener<ApplicationContextEvent> {

    private Map<String,ApplicationContext> contextMap = new Hashtable<String,ApplicationContext>();

    @Override
    public void onApplicationEvent(ApplicationContextEvent event) {
        if( event instanceof ContextStartedEvent || event instanceof ContextRefreshedEvent){
            this.getContextMap().put(event.getApplicationContext().getDisplayName(), event.getApplicationContext());
        }

    }

    public Map<String,ApplicationContext> getContextMap() {
        return contextMap;
    }   
}

然后您可以在需要的地方注入监听器,并提取上下文映射,然后使用getBeanDefinitionNames()查询其所有bean。

@Autowired
private StatusTestsApplicationListener listener;

谢谢 @ams,我还不确定如何使用这个。 - Brian Dolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接