为所有的repositories添加自定义行为

之前的章节并没有实现当你想把一个方法添加到所有的repository接口中。要添加一个自定义行为到所有的repository中,你首先需要添加一个中介接口来声明一个共享的行为。

Example 27. An interface declaring custom shared behavior

  1. @NoRepositoryBean
  2. public interface MyRepository<T, ID extends Serializable>
  3. extends PagingAndSortingRepository<T, ID> {
  4. void sharedCustomMethod(ID id);
  5. }

现在你自己的repository需要扩展这个中介接口来替换之前包含方法声明的Repository接口,接着创建一个扩展持久化repository基础类的中介接口的实现类,这个类之后会作为代理自定义的repository基础类。

Example 28. Custom repository base class

  1. public class MyRepositoryImpl<T, ID extends Serializable>
  2. extends SimpleJpaRepository<T, ID> implements MyRepository<T, ID> {
  3. private final EntityManager entityManager;
  4. public MyRepositoryImpl(JpaEntityInformation entityInformation,
  5. EntityManager entityManager) {
  6. super(entityInformation, entityManager);
  7. // Keep the EntityManager around to used from the newly introduced methods.
  8. this.entityManager = entityManager;
  9. }
  10. public void sharedCustomMethod(ID id) {
  11. // implementation goes here
  12. }
  13. }