2013-06-07 4 views
8

меня это очень простой класс:RunWith и ContextConfiguration странное поведение

@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"); 
    } 
} 

Этот файл контекста, который указан в пути к классам НЕ СУЩЕСТВУЕТ. Я могу поместить практически любое имя, которое я хочу, и код не сломается. Я имею в виду, что тест работает очень хорошо, как будто этот файл действительно существует.

Если бы я сделать небольшое изменение, от: * классов в пути к классам, то клювы, говоря, что этот файл не существует, что это поведение я бы ожидать в первом случае.

Spring Version 3.2.3.RELEASE.

Может кто-нибудь объяснить это странное поведение?

EDIT

Вещи из бревен как предложено:

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

Я даже пытался вывести все бобы из контекста приложения:

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 

Кажется мне, что в случае wildcard, Spring создаст пустой по умолчанию контекст приложения

ответ

18

Цитаты JavaDoc, вероятно, ответить на ваш вопрос:

/** 
* 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*:"; 

Как нет XML-файлов, соответствующих имя application-context-this-does-not-exist.xml на вашем пути к классам, ваша конфигурация равна @ContextConfiguration(locations={}) =>контекста пустых приложений.

Однако при использовании CLASSPATH_URL_PREFIX = "classpath:", что равно говоря «нагрузки этот несуществующий файл» =>ошибка загрузки конфигурации контекста.

+0

Я честно не вижу никакой связи между предоставленной вами документацией и созданным контекстом приложения по умолчанию. Очевидно, что один пустой контекст действительно создан, но в документации четко не сказано. Спасибо за ваш ответ. Будут выдвинуты для усилий, но я хочу, чтобы в документах было очевидное заявление. – Eugene

+1

Я описал, что - без загрузки XML, все, что у вас осталось, - это просто пустой контекст. –

+0

вы сделали, не сомневайтесь. Но это очевидно из кода, который я запускал. Не обижайтесь, но для меня код должен сломаться и не пройти. Я приму это позже, если не получу лучшего объяснения. Спасибо за ваше время! – Eugene

Смежные вопросы