检查在spring上下文中加载了哪些bean

时间:2013-03-09 04:51:10

标签: spring spring-mvc

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

在测试过程中是否有任何方法可以检查实际加载了哪些bean?或者查找运行时加载的bean的完整列表?

谢谢, B'/ P>

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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()

提取contextens的映射,然后为其所有bean进行interogate。
@Autowired
private StatusTestsApplicationListener listener;