Вопрос по Java Spring. Есть несколько реализаций, я хочу в классе-фасаде получать из контекста реализацию в зависимости от enum (например). Как это грамотно сделать в коде метода? Не в поле класса. Нужна best practice.
Наглядная иллюстрация (кликните для увеличения):
Я вижу варианты:
Склеивать id бина из этого enum, и получать по id нужный бин. Можно вынести в отдельный класс-провайдер бинов. Придётся соблюдать некоторое соглашение, но это не большая проблема.
Как-то урезать контекст до нужного пакета (toyota или bmw), и уже искать в нём по интерфейсу. Но урезать контекст без пересоздания, вроде как, нельзя, так что тоже не вариант.
Мне кажется, что оба подхода не очень. Думал инжектить более узкие контексты в зависимости от enum, но инжект контекста вообще плохая практика, по словам Евгения Борисова.
Как это грамотно сделать с помощью Spring? Объекты, реализующие интерфейсы Cleaner, EngineDiagnoster и WheelsChanger содержат поля, помеченные @Autowired и @Resource, поэтому без спринга создавать эти объекты нельзя.