我正在开发一个使用一些 Spring Data Repository 接口(interface)的 Spring Boot 应用程序:
package test;
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private BookRepository repository;
. . .
}
我可以看到 BookRepository 接口(interface)(如下所示)只有在与 Application 类位于同一包中时才能注入(inject):
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 Boot 注释以便能够在另一个包中找到 BookRepository 吗?
最佳答案
使用 Spring @ComponentScan SpringBoot 旁边的注释 @SpringBootApplication并配置自定义基础包(您可以指定包名称列表或将使用其包的类列表),例如
@SpringBootApplication
@ComponentScan(basePackages = {"otherpackage", "..."})
public class Application
或者
@SpringBootApplication
@ComponentScan(basePackageClasses = {otherpackage.MyClass.class, ...})
public class Application
或因为 Spring 1.3.0 (Dec. 2016),你可以直接写:
@SpringBootApplication(scanBasePackageClasses = {otherpackage.MyClass.class, ...})
public class Application
请注意,组件扫描将在给定包的内部和下方找到类。
关于spring-boot - Spring Boot 发现在另一个包上 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425016/