Есть класс
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)?
Есть ли какие-то конвенции (или хотя бы негласные правила) пересекающиеся с моим вопросом?