2013-06-07 19 views
8

mam ten bardzo prosty Klasa:RunWith i ContextConfiguration dziwne zachowanie

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath*:/application-context-this-does-not-exist.xml"}) 
    public class HTMLSourceExtractorImplTest { 

    @Autowired 
    ApplicationContext context; 

    @Test 
    public void test(){ 
     String [] beans = context.getBeanDefinitionNames(); 
      for(String bean : beans){ 
       System.out.println(bean); 
      } 
     System.out.println("Testing"); 
    } 
} 

Ten plik kontekstu, który jest określony w ścieżce klasy nie istnieje. Mogę umieścić praktycznie dowolne imię, które chcę, a kod się nie psuje. Mam na myśli, że test działa dobrze, tak jakby ten plik naprawdę istnieje.

Jeśli zrobię małą zmianę, from: ścieżce klasy * do ścieżce klasy, to dzioby, mówiąc, że ten plik nie istnieje, co jest zachowanie byłoby się spodziewać w pierwszym przypadku również.

Spring Version 3.2.3.RELEASE.

Czy ktoś może wyjaśnić to dziwne zachowanie?

EDIT

Rzeczy z bali, jak je:

 20:47:26,923 INFO [GenericApplicationContext] Refreshing [email protected]f6c65c: startup date [Fri Jun 07 20:47:26 PDT 2013]; root of context hierarchy 

Próbowałem nawet na wyjście wszystkie fasole z kontekstu aplikacji:

org.springframework.context.annotation.internalConfigurationAnnotationProcessor 
    org.springframework.context.annotation.internalAutowiredAnnotationProcessor 
    org.springframework.context.annotation.internalRequiredAnnotationProcessor 
    org.springframework.context.annotation.internalCommonAnnotationProcessor     
    org.springframework.context.annotation.ConfigurationClassProcessor.importAwareProcessor 

Wydaje mi się, że w przypadku wystąpienia problemu wildcard, Spring utworzy domyślny pusty Kontekst aplikacji

Odpowiedz

18

Cytat JavaDoc prawdopodobnie odpowiedzieć na pytanie:

/** 
* Pseudo URL prefix for all matching resources from the class path: "classpath*:" 
* This differs from ResourceLoader's classpath URL prefix in that it 
* retrieves all matching resources for a given name (e.g. "/beans.xml"), 
* for example in the root of all deployed JAR files. 
* @see org.springframework.core.io.ResourceLoader#CLASSPATH_URL_PREFIX 
*/ 
String CLASSPATH_ALL_URL_PREFIX = "classpath*:"; 

Ponieważ nie istnieją żadne pliki XML dopasowania nazwy application-context-this-does-not-exist.xml na ścieżce klas, konfiguracja jest równa @ContextConfiguration(locations={}) =>kontekście pusty aplikacji.

Jednak podczas korzystania CLASSPATH_URL_PREFIX = "classpath:", że równa mówiąc „Load to nieistniejące plik” =>Błąd podczas ładowania konfiguracji kontekstu.

+0

Szczerze mówiąc, nie widzę żadnego powiązania między dostarczoną dokumentacją i domyślnym kontekstem aplikacji. Oczywiste jest, że rzeczywiście utworzono jeden pusty kontekst, ale dokumentacja wyraźnie tego nie stwierdza. Dziękuję za odpowiedź. Poproszę o wysiłek, ale żałuję, że nie było oczywistego oświadczenia w dokumentach. – Eugene

+1

Opisałem, że - bez żadnych plików XML, które można załadować, wszystko, co pozostało, to pusty kontekst. –

+0

zrobiłeś, nie ma co do tego wątpliwości. Ale wynika to z kodu, który prowadziłem. Bez urazy, ale dla mnie kod powinien się złamać, a nie przekazać. Przyjmę to później, chyba że otrzymam lepsze wyjaśnienie. Dziękuję za Twój czas! – Eugene