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 会在您 运行 应用程序时自动为您创建该接口的实现。
我知道 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 会在您 运行 应用程序时自动为您创建该接口的实现。