Задать вопрос
Asics6789
@Asics6789
Студент 2 курса ФКН ВГУ, основной язык Java

Как правильно внедрять зависимости в классы, зависящие от не-бинов?

Есть класс CommitManager:
@Component
public class CommitManager {
//  ...
    @Autowired
    private final FilePatcher filePatcher;
//  ...
}


А так же класс FilePatcher:
@Component
public class FilePatcher {
    private Path directory;

    public FilePatcher(Path directory) {
        this.directory = directory;
    }

    // ...
}


FilePatcher однозначно хочется внедрять как бин, однако в таком случае встает проблема: FilePatcher зависит от поля directory, которое не может быть внедрено через @Value, т.к. не определено заранее по условию (не может лежать в application.properties). По очевидным причинам Spring не может создать бин FilePatcher через конструктор. Потенцинальное решение - отказаться от конструктора, оставив directory неопределенным изначально, с определением его впоследствие через сеттер, может быть небезопасным.

Есть ли альтернативы, кроме как отпустить идею с определением FilePatcher как бина?
Насколько вообще будет приемлемым код с внедрением в CommitManager ещё 8-10 схожих объектов через @Autowired и внедрением одного (FilePatcher) через оператор new (к тому же без контроля на Singleton)?
Есть ли какие-то конвенции (или хотя бы негласные правила) пересекающиеся с моим вопросом?
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы