这是我的Spring存储库界面。

@Repository
public interface WebappRepository extends CrudRepository<myModel, Long> {

}


在我的控制器中,由于Spring注释的魔力,即使它是一个接口,我也可以实例化WebappRepository

public class controller{

    @Autowire
    WebappRepository repo;

    public controller(){

    }
}


但是,使用构造函数的此变体不起作用,并且正确地如此,因为WebappRepository是一个接口。

public class controller{

    WebappRepository repo;

    public controller(){
        this.repo = new WebappRepository();
    }
}


Olivier Gierke本人advocates to avoid @Autowire fields at all costs。如何在避免使用@Autowire的同时“实例化”我的Spring应用程序中的存储库接口?

最佳答案

在构造函数中注入依赖项:

@Component
public class Controller{


    WebappRepository repo;

    @Autowire
    public Controller(WebappRepository repo){
        this.repo = repo;
    }
}

07-26 09:29