Имитация логики репозитория путем автоматического подключения компонента из интерфейса, расширяющего другой интерфейс

#java #spring #spring-data-jpa

#java #spring #spring-data-jpa

Вопрос:

Я хочу имитировать логику JpaRepositry путем автоматического подключения компонента из другого интерфейса, который расширяет интерфейс, реализуемый компонентом

дизайн, описывающий, что я сделал

первый интерфейс :

 public interface Test {
 String getBlaBla();
 String getWhatever();
  }
  

компонент:

     @Component
    public class TestImplementation implements Test {
    @Override
    public String getBlaBla() {
        return "BLA BLA";
    }

    @Override
    public String getWhatever() {
        return "WHATEVER";
    }
}
  

второй интерфейс :

 public interface TestTwo extends Test {
}
  

но у меня возникла проблема с автоматическим подключением компонента из интерфейса TestTwo :

     @Autowired
    private TestTwo test;
  

У меня была проблема с невозможностью автоматического подключения. Не найдено компонентов типа ‘TestTwo’

Я пытался добавить @NoRepositoryBean поверх интерфейса TestTwo, но у меня продолжалось то же самое

Комментарии:

1. вы используете intelj?

Ответ №1:

Я пытался добавить @NoRepositoryBean поверх интерфейса TestTwo, но у меня продолжалось то же самое

TestTwo не является интерфейсом репозитория Spring, поэтому Spring игнорирует этот момент.

@NoRepositoryBean javadoc действительно заявляет :

Аннотация, исключающая использование интерфейсов репозитория и, следовательно, получение создаваемого экземпляра.

Я никогда не буду работать с вашими собственными интерфейсами «из коробки».
Интерфейсы, которые расширяются JpaRepository , обрабатываются Spring, когда контейнер начинает предоставлять им реализацию.
JpaRepository это специальный интерфейс, обрабатываемый Spring.
В вашем случае Spring не обрабатывает TestTwo интерфейс таким же образом.

Чтобы достичь такой цели или, по крайней мере, закрыть вещи, которые вас должны заинтересовать CGLIB или AOP с помощью Spring.