Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @导入源不工作_Java_Spring_Spring Boot_Mustache - Fatal编程技术网

Java @导入源不工作

Java @导入源不工作,java,spring,spring-boot,mustache,Java,Spring,Spring Boot,Mustache,我是SpringBoot新手,我想实现一个简单的web应用程序,它使用一些小胡子模板呈现UI 我已经编写了一些Spring组件(控制器、DAO、服务),它们的包结构不同(与SpringBoorRunner类不在同一目录或子目录下)。因此,我使用@ImportResource注释来声明spring配置。但是我的应用程序没有读取任何配置文件 有关更多详细信息,请参阅下面的代码段 项目结构: 这里并不是说,Spring启动应用程序启动器类是在包SpringPropertyReaderApplicat

我是SpringBoot新手,我想实现一个简单的web应用程序,它使用一些小胡子模板呈现UI

我已经编写了一些Spring组件(控制器、DAO、服务),它们的包结构不同(与SpringBoorRunner类不在同一目录或子目录下)。因此,我使用
@ImportResource
注释来声明spring配置。但是我的应用程序没有读取任何配置文件

有关更多详细信息,请参阅下面的代码段

  • 项目结构:
  • 这里并不是说,Spring启动应用程序启动器类是在包
    SpringPropertyReaderApplication
    中编写的

    ApplicationConfiguration
    类是在相同的分层包结构下编写的,该结构使用
    @ImportResource
    注释定义了很少的配置

  • Spring启动应用程序启动器类
  • 包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 launcher类不在同一个包中的服务和控制器

    
    
    我已经在SpringBoot加载的所有bean名称的日志中添加了代码。但我没有找到任何名为“xmlStringBean1”和“myController”的bean


    还要注意的是,如果我将我的Rest控制器和其他类与Spring boot launcher类放在同一个包层次结构下,那么这个应用程序可以正常工作。

    我认为您的Spring boot应用程序没有检测到用
    @Configuration
    注释的类,因为默认情况下,它将尝试在与主类相同的包或子包中查找配置类。用
    @ComponentScan
    注释您的
    SpringPropertyReaderApplication
    ,如下所示:

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

    因为,application-context.xml驻留在spring文件夹的
    src/main/resources
    下。但是
    ApplicationConfiguration.java
    中定义的@ImportResource注释试图将其扫描到根路径内部。因此,未检测到该文件

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

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

    这将强制框架在spring目录中搜索application-context.xml(从根级别开始)。

    尝试以下操作:@ImportResource(locations={“classpath:spring/application-context.xml”}。因为application-context.xml驻留在spring目录中,而不是根目录中。现在使用xml配置是不常见的。考虑使用javaconfig@Himanshu,你的建议帮助我解决了这个问题。我使用了注释@ImportResource(locations={“classpath*:spring/application context.xml”}),它开始检测xml配置文件。请将此添加为答案,以便我将其标记为最终解决方案。@Himanshu,这有点棘手,因为如果我遇到异常“未找到文件”,我提供了一个错误的文件名,该文件名甚至不存在于类路径中。但我的旧方法“@ImportResource(locations={”classpath*:application context.xml“}”并没有出现任何异常。所以,我假设,容器找到了文件,但它没有加载bean。豆名“someDummyBean1”正在日志中打印。因此,它确认检测到了“ApplicationConfiguration”类,并创建了它的所有bean。
    @ImportResource(locations = {"classpath:spring/application-context.xml"}) .