Spring启动发现在另一个包上自动装配

use*_*073 19 spring-boot

我正在开发一个使用一些Spring Data Repository接口的Spring Boot应用程序:

package test;
@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private  BookRepository repository;
    . . .
}
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果BookRepository接口与Application类位于同一个包中,则只能注入它(如下所示):

package test;
public interface BookRepository extends MongoRepository<Book, String> {

    public Book findByTitle(String title);
    public List<Book> findByType(String type);
    public List<Book> findByAuthor(String author);

}
Run Code Online (Sandbox Code Playgroud)

我可以在我的类上应用Spring Boot注释,以便能够在另一个包中找到BookRepository吗?

Luk*_*sch 31

在SpringBoot @SpringBootApplication旁边使用Spring @ComponentScan注释并配置自定义基础包(您可以指定包名列表或将使用其包的类列表),例如

@SpringBootApplication
@ComponentScan(basePackages = {"otherpackage", "..."})
public class Application
Run Code Online (Sandbox Code Playgroud)

要么

@SpringBootApplication
@ComponentScan(basePackageClasses = {otherpackage.MyClass.class, ...})
public class Application
Run Code Online (Sandbox Code Playgroud)

或者从Spring 1.3.0(2016年12月)开始,您可以直接写:

@SpringBootApplication(scanBasePackageClasses = {otherpackage.MyClass.class, ...})
public class Application
Run Code Online (Sandbox Code Playgroud)

请注意,组件扫描将在给定包的内部和下方找到类.

  • 其实这已经过时了。您可以直接在@SpringBootApplication(scanBasePackages = {“ ...”,“ ,,”}}上执行此操作 (2认同)