如果主类不在顶级包中,则找不到@RestController

时间:2015-06-02 10:10:19

标签: java spring spring-boot

我有一个Resource注释@RestController的课程,但仅在使用App注释的主要课程@SpringBootApplication位于顶级包中时使用。

使用:

com
 +- test
     +- project
         +- App.java
         |
         +- resources
         |   +- Resource.java

不起作用:

com
 +- test
     +- project
         +- app
         |   +- App.java
         |
         +- resources
         |   +- Resource.java

2 个答案:

答案 0 :(得分:4)

我假设您使用的是@SpringBootApplication注释。您应该知道它等同于使用@Configuration,@ EnableAutoConfiguration和@ComponentScan。

来自documentation

  

ComponentScan 配置要使用的组件扫描指令   @Configuration类。提供与Spring XML并行的支持    元件。

     

basePackageClasses(),basePackages()或其别名值()之一可以   指定用于定义要扫描的特定包。 如果具体包装   未定义扫描将从类的包中发生   这个注释。

您使用默认设置,因此您的扫描将在包含注释的类包中进行。

您可以像以前那样移动它,也可以在@ComponentScan中指定basePackages。

答案 1 :(得分:2)

documentation中你可以发现建议将主类保持在所有其他类之上,以避免使用basePackage

  

我们通常建议您将主应用程序类放在其他类之上的根包中。 @EnableAutoConfiguration注释通常放在主类上,它隐含地为某些项定义了基础“搜索包”。
  ...
  使用根包还允许使用@ComponentScan注释,而无需指定basePackage属性。如果主类位于根包中,也可以使用@SpringBootApplication注释。