这是我的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应用程序中的存储库接口?
答案 0 :(得分:2)
在构造函数中注入依赖项:
@Component
public class Controller{
WebappRepository repo;
@Autowire
public Controller(WebappRepository repo){
this.repo = repo;
}
}
答案 1 :(得分:2)
如果您使用的是Spring 4.3+,并且您的目标类只有一个构造函数,则可以省略自动装配的注释。 Spring将为其注入所有必需的依赖项。 因此,只需在构造函数下面编写即可:
public controller(WebappRepository repo){
this.repo = repo;
}