Spring разность префикса classpath

Документированный здесь он утверждает

Этот специальный префикс указывает, что все ресурсы класса, соответствующие данное имя должно быть получено (внутренне это происходит по существу через ClassLoader.getResources(...) вызова), а затем объединяются для формирования определение конечного контекста приложения.

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

В чем разница между использованием classpath*:conf/appContext.xml, а не classpath:conf/appContext.xml без звездочки.

Ответ 1

ПРОСТОЕ ОПРЕДЕЛЕНИЕ

classpath*:conf/appContext.xml просто означает, что все файлы appContext.xml в папках conf во всех ваших банках в пути к классам будут собраны и объединены в один большой контекст приложения.

В отличие от classpath:conf/appContext.xml будет загружаться только один такой файл... первый найденный в вашем пути к классам.

Ответ 2

Синтаксис classpath*:... полезен в первую очередь, когда вы хотите создать контекст приложения из нескольких файлов определения bean, используя синтаксис подстановочных знаков.

Например, если вы создаете свой контекст с помощью classpath*:appContext.xml, путь к классам будет проверяться для каждого ресурса с именем appContext.xml в пути к классам, а определения bean из всех их объединены в один контекст.

В отличие от этого, classpath:conf/appContext.xml получит один и только один файл с именем appContext.xml из пути к классам. Если их больше одного, остальные будут проигнорированы.

Ответ 3

classpath *: Он относится к списку ресурсов и загружает все такие файлы, присутствующие в пути к классам, и список может быть empty, и если нет такого файла в пути к классам, то приложение не генерирует никакого исключения (просто игнорирует ошибку).

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

java.io.FileNotFoundException: class path resource [conf/appContext.xml] cannot be opened because it does not exist