8

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

有没有办法在测试期间检查实际加载了哪些 bean?还是要查找在运行时加载的完整 bean 列表?

谢谢,乙

4

2 回答 2

6

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

于 2013-03-09T05:15:24.677 回答
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()

@Autowired
private StatusTestsApplicationListener listener;
于 2013-03-09T15:52:55.207 回答