2014-04-22 8 views
5

Sono nuovo per la struttura di primavera. Sto cercando di conoscere l'elenco dei file xml cui si fa riferimento durante il caricamento dei bean.come sapere la risorsa da cui viene caricato un bean nel progetto spring.

Scrivendo una classe che è ApplicationContextAware, sono in grado di visualizzare l'elenco dei fagioli con:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:spring/sample-testcontext.xml") 

public class SampleClass implements ApplicationContextAware { 
    @Autowired 
    ApplicationContext applicationContext; 

    @Test 
    public void testMethod() { 

     for (String beanName : applicationContext.getBeanDefinitionNames()) { 
      System.out.println("BeanName " + beanName); 
     } 
    } 
} 

ma voglio sapere da quali file di configurazione i fagioli sono caricati.

Say "campione-testcontext.xml" contiene

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 


    <beans:import resource="classpath*:spring/sample-testOneMorecontext.xml"/> 
</beans:beans> 

voglio sapere elenco di nomi di file da cui i fagioli vengono caricati come "campione-testOneMorecontext.xml" e "campione-testcontext.xml".

risposta

4

Perché dovresti farlo esattamente? Non sono sicuro che l'implementazione interna tenga traccia di tali informazioni una volta caricato il contesto. Tuttavia, c'è un modo per sapere da quale risorsa è stato caricato un particolare bean. Questo può essere utile se hai diverse definizioni di bean con lo stesso nome e vuoi sapere quale "ha vinto".

Riprendendo il vostro esempio (a proposito, non è necessario implementare ApplicationContextAware quanto si sta autowiring esso)

@ContextConfiguration 
@ContextConfiguration("classpath:spring/sample-testcontext.xml") 
public class SampleTest { 

    @Autowired 
    private ConfigurableApplicationContext context; 

    @Test 
    public void foo() { 
     ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); 
     for (String beanName : context.getBeanDefinitionNames()) { 
      System.out.println(beanName + " --> "+ beanFactory.getBeanDefinition(beanName).getResourceDescription()); 
     } 
    } 
} 

Questo ti dà qualcosa di simile (escludendo le definizioni di fagioli post processore interno che l'implementazione di default può Registrazione automaticamente)

beanFirst --> class org.SampleTest$Config 
beanSecond --> class path resource [foobar.xml] 

Dove beanFirst stato caricato da una classe interna del test (chiamato Config) e beanSecond stato caricato da un file chiamato foobar.xml nella radice del classpath.

Problemi correlati