我是Spring Boot的新手,我想实现一个简单的Web应用程序,该应用程序使用一些Mustache模板呈现UI。
我已经编写了一些Spring组件(控制器,DAO,服务),它们的包结构不同(不属于与Spring boor运行器类相同的子目录)。因此,我使用@ImportResource
批注来声明spring配置。但是我的应用程序未读取任何配置文件。
有关更多详细信息,请参见下面的代码片段
并非如此,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("------------------------------------------------"); } }
package 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启动器类不在同一软件包中的服务和控制器。
<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 boot加载的bean名称。但是我没有找到任何名为“ xmlStringBean1”和“ myController”的bean。
还请注意,如果我将Rest控制器和其他类放在与Spring boot启动器类相同的包层次结构中,则此应用程序可以正常工作。
答案 0 :(得分:1)
我认为您的Spring Boot应用程序未检测到带有@Configuration
的类,因为默认情况下,它将尝试在与主类相同或子包中查找Configuration类 。用SpringPropertyReaderApplication
注释您的@ComponentScan
,如下所示:
@SpringBootApplication
@ComponentScan(basePackageClasses = {ApplicationConfiguration.class})
public class SpringPropertyReaderApplication {
// your code here
}
答案 1 :(得分:0)
因此,application-context.xml位于src/main/resources
下的spring文件夹中。但是在ApplicationConfiguration.java
中定义的@ImportResource批注尝试仅在根路径内对其进行扫描。因此,未检测到文件。
@ImportResource(locations = {"classpath*:application-context.xml"})
要替换为
@ImportResource(locations = {"classpath:spring/application-context.xml"}) .
这将强制执行框架以在spring目录(从根级别开始)中搜索application-context.xml。