Java Spring@Autowired能否注入一个未实现的接口?

Java Spring@Autowired能否注入一个未实现的接口?,java,spring,spring-boot,dependency-injection,Java,Spring,Spring Boot,Dependency Injection,我试图从一个简单的SpringBootRESTAPI中理解代码。我知道spring可以通过@Autowired提供依赖注入,但是当您在尚未实现的接口上使用@Autowired时会发生什么?spring提供了什么类型的对象 下面的1类RoomController中有一个@Autowired RoomRepository。spring向roomRepository注入了什么/如何注入?spring能以某种方式实例化接口吗?该接口只是在crudinInterface上使用@Repository的占位符

我试图从一个简单的SpringBootRESTAPI中理解代码。我知道spring可以通过@Autowired提供依赖注入,但是当您在尚未实现的接口上使用@Autowired时会发生什么?spring提供了什么类型的对象

下面的1类RoomController中有一个@Autowired RoomRepository。spring向roomRepository注入了什么/如何注入?spring能以某种方式实例化接口吗?该接口只是在crudinInterface上使用@Repository的占位符吗?这是怎么回事?(顺便说一句,此代码运行良好)

课程:

1.)

在尚未实现的接口上使用@Autowired时会发生什么

如果将@Autowired放在未实现的接口上,Spring将抛出一个错误。您需要有一个实现来使用注释@Autowired

这里您没有看到任何实现,但有一个。当您构建此应用程序(mvn包或更高的maven目标)时,带有Crudepository的annotation@Repository将自动生成RoomRepository的实现。 这个实现将在第一个类中提供给@Autowired

在尚未实现的接口上使用@Autowired时会发生什么

如果将@Autowired放在未实现的接口上,Spring将抛出一个错误。您需要有一个实现来使用注释@Autowired

这里您没有看到任何实现,但有一个。当您构建此应用程序(mvn包或更高的maven目标)时,带有Crudepository的annotation@Repository将自动生成RoomRepository的实现。
就是这个实现将在您的第一堂课中提供给@Autowired。

谢谢,我在@Repository或crudepository的文档中没有看到任何关于这个的内容。那么生成的实现是从这两者的组合中得到提示的?这是因为容器的工作方式吗?你能为我指出一些方向来阅读更多关于这方面的内容吗?我真的可以把你引向spring文档()的任何其他地方,因为我主要是在工作中从另一位同事那里学到spring的。我认为从注释和Crudepository的父类/接口生成是及时的,因为最后一个类/接口不是唯一可以使用的。谢谢,我在@Repository或Crudepository的文档中都没有看到这方面的任何内容。那么生成的实现是从这两者的组合中得到提示的?这是因为容器的工作方式吗?你能为我指出一些方向来阅读更多关于这方面的内容吗?我真的可以把你引向spring文档()的任何其他地方,因为我主要是在工作中从另一位同事那里学到spring的。我认为从注释和Crudepository的父类/接口生成是及时的,因为最后一个不是唯一可以使用的
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class LearningSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(LearningSpringApplication.class, args);
    }

    @RestController
    @RequestMapping("/rooms")
    public class RoomController{
        @Autowired
        private RoomRepository roomRepository;

        @GetMapping
        public Iterable<Room> getRooms(){
            return this.roomRepository.findAll();
        }

    }

}
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RoomRepository extends CrudRepository<Room, Long> {
}

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="ROOM")
public class Room {
    @Id
    @Column(name="ROOM_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long roomId;
    @Column(name="NAME")
    private String roomName;
    @Column(name="ROOM_NUMBER")
    private String roomNumber;
    @Column(name="BED_INFO")
    private String bedInfo;

    Getters and Setters here