Interface 只是 Java 中的骨架那么 CrudRepository 是如何提供所有 CRUD 操作的呢?

Interface is just skeleton in Java then how does CrudRepository provides all CRUD operations?

我知道 Java 中的接口只有框架或方法签名。在下面的示例接口中没有定义任何方法,但仍然可以毫无问题地执行操作。谁能解释一下它是如何工作的?

AlbumRepository 接口从另一个扩展而来。它还应该只有骨架,没有方法定义。

import org.cloudfoundry.samples.music.domain.Album;
import org.springframework.data.repository.CrudRepository;

@Repository
public interface AlbumRepository extends CrudRepository<Album, String> {
}

AlbumController ,这里的 .save 或 .findall 工作得很好。它是如何工作的,因为原始接口方法没有在任何地方定义。

public class AlbumController {

    private AlbumRepository repository;

    @Autowired
    public AlbumController(AlbumRepository repository) {
        this.repository = repository;
    }
    @ResponseBody
    @RequestMapping(method = RequestMethod.GET)
    public Iterable<Album> albums() {
        return repository.findAll();
    }

    @ResponseBody
    @RequestMapping(method = RequestMethod.PUT)
    public Album add(@RequestBody @Valid Album album) {
        logger.info("Adding album " + album.getId());
        return repository.save(album);
    }
}

我是 Java 休眠的新手,正在尝试了解它是如何工作的。对不起,如果我遗漏了什么...

欢迎使用 Spring 数据的魔法。

您说得对,接口本身不会执行任何操作。但是,这里 Spring Data JPA 会在您 运行 应用程序时自动为您创建该接口的实现。