Java Spring@Autowired能否注入一个未实现的接口?
我试图从一个简单的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的实现。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的占位符
就是这个实现将在您的第一堂课中提供给@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