我正在开发一个使用Spring Data Repository接口的Spring Boot应用程序:
package test;
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private BookRepository repository;
. . .
}
我可以看到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);
}
我可以在我的类上应用Spring Boot注释,以便能够在另一个包中找到BookRepository吗?
答案 0 :(得分:27)
在SpringBoot @ComponentScan旁边使用Spring @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
请注意,组件扫描会在给定包的内部和下方找到类。
答案 1 :(得分:0)
通过在Spring启动启动自定义类中使用@ComponentScan批注来验证保存在不同包中的类的范围。
还在用于允许框架访问类的模态类中添加@Component。
示例保留在 http://www.javarticles.com/2016/01/spring-componentscan-annotation-example.html