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