2013-03-09 5 views
6

Ich habe eine Reihe von seltsamen Fehlern in Test und Bereitstellung. Sie scheinen darauf hinzuweisen, dass einige meiner Beans nicht in den Kontext geladen werden, obwohl sie in applicationContext.xml definiert sind.Überprüfen Sie, welche Beans im Frühjahr Kontext geladen haben

Gibt es eine Möglichkeit, während des Tests zu überprüfen, welche Bohnen tatsächlich geladen wurden? Oder um eine vollständige Liste der zur Laufzeit geladenen Beans zu finden?

Danke, b

Antwort

4

Beim Start auf Info-Ebene Frühling logs die Namen aller Bohnen durch einen Kontext geladen. Oder im Code können Sie getBeanDefinitionNames() verwenden, um alle Bean-Namen abzurufen.

+0

Ich vermutete, es wäre leicht, aus um dies auszuprobieren und DANKE! –

+1

Dies war nützlich, um einen Test für diejenigen, die es brauchen: '@' Autowired ApplicationContext applicationContext; '@' Test public void testContext() { Zeichenfolge [] beans = applicationContext.getBeanDefinitionNames(); für (String b: Bohnen) { System.out.println ("***" + b); } } –

0

Wenn es mehr als einen Kontext gibt, sagen Sie, wenn Sie Feder mvc verwenden, können Sie etwas stärkeres wie dieses verwenden.

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; 
    } 
} 

Sie können dann den Hörer injizieren, wo es gebraucht wird, und die Karte von contextens zu extrahieren und interogate es dann für alle seine Bohne, mit dem getBeanDefinitionNames()

@Autowired 
private StatusTestsApplicationListener listener; 
+0

Dank @ams Ich bin mir nicht sicher, wie Sie das noch verwenden. –

Verwandte Themen