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

时间:2015-05-24 15:10:40

标签: spring-boot

我正在开发一个使用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吗?

2 个答案:

答案 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