Spring boot find autowired on another package

Spring boot find autowired on another package

我正在开发一个 Spring 启动应用程序,它使用一些 Spring 数据存储库接口:

package test;
@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private  BookRepository repository;
    . . .
}

我可以看到 BookRepository 接口(如下所示)只有在与应用程序位于同一包中时才能注入 class:

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);

}

是否有任何 Spring 引导注释可以应用到我的 classes 上以便能够在另一个包中找到 BookRepository?

使用 Spring @ComponentScan annotation alongside the SpringBoot @SpringBootApplication 并配置自定义基础包(您可以指定包名称列表或 类 将使用其包的列表),因此例如

@SpringBootApplication
@ComponentScan(basePackages = {"otherpackage", "..."})
public class Application

@SpringBootApplication
@ComponentScan(basePackageClasses = {otherpackage.MyClass.class, ...})
public class Application

或者自Spring 1.3.0(2016年12月)起,您可以直接写:

@SpringBootApplication(scanBasePackageClasses = {otherpackage.MyClass.class, ...})
public class Application

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

通过在 Spring 引导启动自定义 class.

中使用 @ComponentScan 注释,可以很好地验证 classes 保存在不同包中的范围

还在模态 classes 中添加 @Component 以允许框架访问 classes。

示例保存在 http://www.javarticles.com/2016/01/spring-componentscan-annotation-example.html