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