Шлях розташування або шляхи, що передаються конструктору ApplicationContext, є рядками ресурсів, які дозволяють контейнеру завантажувати з різних зовнішніх ресурсів, таких як локальна файлова система, Java CLASSPATH тощо.

Java
ApplicationContext context = новий ClassPathXmlApplicationContext("services.xml", "daos.xml");
Kotlin
val context = ClassPathXmlApplicationContext("services.xml", "daos.xml")

Після вивчення IoC-контейнера Spring ти, можливо, захочеш дізнатися більше про абстракцію Spring Resource, яка надає зручний механізм для читання InputStream із місць, визначених у синтаксисі URI. Зокрема, шляхи Resource використовуються для побудови контекстів додатків.

У цьому прикладі показано файл конфігурації об'єктів рівня служб (services.xml):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- служби -->
    <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
        <property name="accountDao" ref="accountDao"/>
        <property name="itemDao" ref="itemDao"/>
        <!-- додаткові взаємодіючі об'єкти та конфігурація для цього біна знаходяться тут -->
    </bean>
    <!-- більше визначень біна для служб знаходяться тут -->
</beans>

У цьому прикладі показано файл daos.xml об'єктів доступу до даних:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="accountDao"
        class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">
        <!-- додаткові взаємодіючі об'єкти та конфігурація для цього біна знаходяться тут -->
    </bean>
    <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">
        <!-- додаткові взаємодіючі об'єкти та конфігурація для цього біна знаходяться тут -->
    </bean>
    <!-- більше визначень біна для об'єктів доступу до даних тут -->
</beans>

У попередньому прикладі рівень служб складається з класу PetStoreServiceImpl та двох об'єктів доступу до даних типів JpaAccountDao та JpaItemDao (на основі стандарту об'єктно-реляційного відображення JPA Object-Relational Mapping). Елемент property name посилається на ім'я властивості JavaBean, а елемент ref посилається на ім'я іншого визначення біна. Цей зв'язок між елементами id та ref виражає залежність між об'єктами, що взаємодіють.

Складання конфігураційних метаданих на основі XML

Це може бути корисним, якщо визначення бінів охоплюють кілька XML-файлів. Зазвичай окремий XML-файл конфігурації є логічним рівнем або модулем в архітектурі.

Можна використовувати конструктор контексту програми для завантаження бінів визначень з усіх цих XML-фрагментів. Цей конструктор займає кілька місць у Resource. Як альтернативу використовуй одне або декілька входжень елемента для завантаження бінів з іншого файлу або файлів. У цьому прикладі показано, як це зробити:

<beans>
    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>
    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>

У попередньому прикладі зовнішні визначення бінів завантажуються з трьох файлів: services.xml, messageSource.xml та themeSource.xml. Всі шляхи розташування належать до файлу визначення, що виконує імпорт, тому services.xml повинен знаходитися в тому ж каталозі або classpath, що і файл, який виконує імпорт, а messageSource.xml та themeSource.xml повинні знаходитися в resources, що знаходяться нижче розташування імпортованого файлу. Як бачиш, провідний слеш ігнорується. Однак, з огляду на те, що ці шляхи є відносними, краще взагалі не використовувати слеш. Вміст файлів, що імпортуються, включно з елементом верхнього рівня <bean/>, повинен бути дійсним XML-визначенням біна, згідно зі схемою Spring (Spring Schema).

Можна, але не рекомендується посилатися на файли в батьківських каталогах, використовуючи відносний шлях "../". Це створює залежність від файлу, який знаходиться за межами поточної програми. Зокрема, таке посилання не рекомендується використовувати для classpath: (наприклад, classpath:../services.xml), де за допомогою процедури дозволу під час виконання вибирається "найближчий" корінь classpath, а потім проглядається його батьківський каталог. Зміна конфігурації шляху класу може призвести до вибору іншого, неправильного каталогу.

Ти завжди можеш використовувати певне розташування ресурсів замість відносних шляхів: наприклад, file:C:/config/services.xml або classpath:/config/services.xml. Однак май на увазі, що ти прив'язуєш конфігурацію своєї програми до певних абсолютних положень. Зазвичай краще зберігати непряму адресацію для таких абсолютних розташування — наприклад, через плейсхолдери "${....}", які дозволяються щодо системних властивостей JVM під час виконання.

Саме простір імен забезпечує можливість використання директиви імпорту. Додаткові можливості конфігурації, окрім простих бінів, доступні в деяких просторах імен XML, що надаються Spring (наприклад, простори імен context і util).

Визначення бінів за допомогою Groovy DSL

Як додатковий приклад метаданих, конфігурація яких винесена до зовнішнього файлу, визначення бінів також можуть бути виражені за допомогою визначення через Groovy DSL Spring, як це відомо завдяки фреймворку Grails. Зазвичай така конфігурація знаходиться у файлі ".groovy" і має структуру, показану в наступному прикладі:

beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}

Цей стиль конфігурації багато в чому еквівалентний XML-визначенням бінів і навіть підтримує XML-простір імен конфігурації Spring. Він також дозволяє імпортувати XML-файли визначення бінів за допомогою директиви importBeans.