Загрузка applicationcontext.xml при использовании SpringApplication

Может ли кто-нибудь привести пример SpringApplication, который загружает файл applicationContext.xml?

Я пытаюсь перенести свое приложение GWT RPC в веб-службу RESTful, используя пример Spring (на основе Gradle). У меня есть applicationContext.xml, но я не понимаю, как заставить SpringApplication загрузить его. Загрузка вручную через

ApplicationContext context = new ClassPathXmlApplicationContext(args);

приводит к пустому контексту. ... и даже если бы это сработало, оно было бы отличным от того, что было возвращено из

SpringApplication.run(Application.class, args);

Или есть способ получить внешние компоненты в контексте приложения, созданном SpringApplication.run?


person Raster    schedule 20.03.2015    source источник


Ответы (4)


Если вы хотите использовать файл из своего пути к классам, вы всегда можете сделать это:

@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class ExampleApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

Обратите внимание на строку classpath в аннотации @ImportResource.

person Tomasz Dzieniak    schedule 12.05.2016

Вы можете использовать @ImportResource для импорта файла конфигурации XML в приложение Spring Boot. Например:

@SpringBootApplication
@ImportResource("applicationContext.xml")
public class ExampleApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(ExampleApplication.class, args);
    }

}
person Andy Wilkinson    schedule 21.03.2015

Аннотация не обязательно должна быть (в классе), что (имеет основной метод), что (имеет этот вызов ниже):

SpringApplication.run(Application.class, аргументы);

(в вашем случае я говорю, что @ImportResource НЕ обязательно должен быть в вашем классе)

открытый класс ExampleApplication {}

.........

У вас может быть другой класс

@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class XmlConfiguration {
}

или для ясности

@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class MyWhateverClassToProveTheImportResourceAnnotationCanBeElsewhere {
}

Вышеупомянутое упоминается в этой статье

http://www.springboottutorial.com/spring-boot-java-xml-context-configuration

.........

БОНУС:

И на всякий случай вы, возможно, подумали, что «SpringApplication.run» был пустым методом ..... это НЕ так.

Вы также можете сделать это:

public static void main(String[] args) {

        org.springframework.context.ConfigurableApplicationContext applicationContext = SpringApplication.run(ExampleApplication.class, args);

        String[] beanNames = applicationContext.getBeanDefinitionNames();
        Arrays.sort(beanNames);

        for (String name : beanNames) {
            System.out.println(name);
        }

Это также тонко подскажет вам обо всех многих, многих, многих (я упомянул «многие»?).... зависимости, которые привносит весенняя загрузка. В зависимости от того, с кем вы говорите, это хорошо (кто-то еще сделал все хорошее для меня) или зло (воу, это много зависимостей, которые я не контролирую).

хэштег: иногда смотри за занавеской

person granadaCoder    schedule 23.02.2019

Спасибо, Энди, это сделало это очень кратким. Однако моей главной проблемой оказалось получение applicationContext.xml в пути к классам.

По-видимому, помещение файлов в src/main/resources требуется, чтобы поместить их в путь к классам (поместив их в банку). Я пытался установить CLASSPATH, который просто проигнорировали. В моем примере выше, казалось, что загрузка завершилась бесшумно. Использование @ImportResource привело к подробному сбою (что помогло мне отследить настоящую причину).

person Raster    schedule 26.03.2015