@Autowired интерфейса без реализации в сервисе

130
14 мая 2021, 05:40

Есть некий интерфейс:

public interface SomeInterface {
    @Annotation1
    @Annotation2
    @Annotation3
    String getSomeNewObject(Object obj);
}

В нём благодаря аннотациями уже описана вся логика и нет нужды в реализации сервиса. Как можно сделать @Autowired этого интерфейса и вызывать его в другом сервисе например.

@Service
public class SomeService {
    @Autowired
    SomeInterface someInterface;
    public String doSomething(Object obj) {
        String str = someInterface.getSomeNewObject(obj);
        return str;
    }
}
Answer 1

Если говорить и идти по накатанной программистами дороге, то ответ такой:

Нет. Это невозможно, Spring попытается найти и создать экземпляр с реализацией (Instance) данного интерфейса, а как нам известно создавать экземпляры интерфейса или абстрактных классов нельзя.

Но если сойти с ума, то конечно возможно всё, однако данный способ очень нетривиальный и скорее всего если ваш код будет сопровождать психопат знающий где вы живёте, будет не очень приятно.

@Configuration
public class SomeBeanConfig {
  @Bean
  public SomeInterface publicBean() {
    return new SomeInterface() {
    };
  }
}
Answer 2

Сделайте пустую реализацию ващего интерфейса, поставьте над ней @Component, и инжектайте себе спокойно, так как и хотели, через @Autowired

READ ALSO
Проблема с использованием цикла for

Проблема с использованием цикла for

Всем привет! Я только новичок и пытаюсь разобраться с циклом for в Java

77
Как перехватить исключения метода

Как перехватить исключения метода

Есть метод в кодеОн подключается к базе и заносит туда значения

104
this.ИМЯ_ФУНКЦИИ is not a function

this.ИМЯ_ФУНКЦИИ is not a function

Есть класс, в котором есть 3 функцииДве из них должны возвратить значение

300
Анимация спрайтов не один раз

Анимация спрайтов не один раз

Я хотела сделать так, чтобы вся информация о спрайте хранилась в объекте и функцию отрисовки можно было бы использовать много раз не только...

124