@ImportResource не работает - PullRequest
       22

@ImportResource не работает

0 голосов
/ 25 августа 2018

Я новичок в загрузке Spring и хочу реализовать простое веб-приложение, которое отображает пользовательский интерфейс с использованием некоторых шаблонов Mustache.

Я написал несколько компонентов Spring (контроллеры, DAO, Services), структура пакетов которых отличается (не попадает в тот же каталог или подкаталог, что и класс Spring Boor Runner).Поэтому я использую аннотацию @ImportResource для объявления конфигурации пружины.Но мое приложение не читает никаких файлов конфигурации.

Пожалуйста, обратитесь к фрагменту кода ниже для более подробной информации

  1. Структура проекта:

enter image description here

Здесь не так, классы запуска загрузочных приложений Spring, написанные в пакете SpringPropertyReaderApplication.

ApplicationConfiguration, класс написан в той же иерархической структуре пакета, которая определила еще несколько конфигураций с использованием @ImportResource аннотация.

Класс запуска весенней загрузки приложения.

пакет com.example.launcher;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class SpringPropertyReaderApplication {

  public static void main(String[] args) {


      ApplicationContext applicationContext = SpringApplication.run(SpringPropertyReaderApplication.class, args);

      System.out.println("------------------------------------------------");
      System.out.println("-----Printing Bean Definition Names ------------");
      System.out.println("------------------------------------------------");
      for (String name : applicationContext.getBeanDefinitionNames()) {
          System.out.println(name);
      }
      System.out.println("------------------------------------------------");
      System.out.println("--------------------END------------------------");
      System.out.println("------------------------------------------------");
  }
}
Класс ApplicationConfiguration, где у меня есть общее расположение других файлов конфигурации Spring.

пакет com.example.launcher.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource(locations = {"classpath*:application-context.xml"})
public class ApplicationConfiguration {

  @Bean
  public String someDummyBean1() {
      return "someDummyBean1";
  }
}
Конфигурация приложения Spring, которая не загружается контейнером.

Здесь я добавил аннотацию сканирования компонентов для сканирования моих служб и контроллеров, которые не были в том же пакете, что и класс запуска Spring.

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd">


  <context:component-scan
      base-package="com.example" />

  <bean id="xmlStringBean1" class="java.lang.String">
      <constructor-arg value="stringBean1" />
  </bean>

</beans>

Я добавил код в журнал всех имен бинов, которые загружаются при загрузке Spring.Но я не нашел ни одного bean-компонента с именами "xmlStringBean1" и "myController".

Также обратите внимание, что это приложение работает нормально, если я помещаю свой контроллер Rest и другие классы в ту же иерархию пакетов, что и класс загрузочного загрузчика Spring.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Поскольку application-context.xml находится в папке spring в папке src/main/resources. Но аннотация @ImportResource, определенная в ApplicationConfiguration.java, пытается сканировать ее только внутри корневого пути. Следовательно, файл не был обнаружен.

@ImportResource(locations = {"classpath*:application-context.xml"})

подлежит замене на

@ImportResource(locations = {"classpath:spring/application-context.xml"}) . 

Это заставит каркас для поиска application-context.xml внутри каталога Spring (начиная с корневого уровня).

0 голосов
/ 25 августа 2018

Я думаю, что ваше весеннее загрузочное приложение не обнаруживает класс, помеченный @Configuration, потому что по умолчанию оно будет пытаться найти классы конфигурации в тех же или дочерних пакетах, что и основной класс . Аннотируйте ваш SpringPropertyReaderApplication с помощью @ComponentScan, например:

@SpringBootApplication
@ComponentScan(basePackageClasses = {ApplicationConfiguration.class})
public class SpringPropertyReaderApplication {
    // your code here
}
...