У меня есть структура классов по этим направлениям:
public class Worker {
private Parser parser;
private Validator validator;
private Feeder feeder;
//...
}
Parser
, Validator
и Feeder
- это все интерфейсы с различными классами реализации. Эти поля создаются в контексте создания Worker и не распределяются между работниками.
Что-то, что я хочу сделать, - это иметь один экземпляр org.slf4j.Logger
для каждого Worker, который затем будет использоваться синтаксическим анализатором, валидатором и фидером по мере необходимости. По сути, при создании экземпляра мы хотим дать Рабочему имя, а затем все журналы используют это имя, например так:
org.slf4j.LoggerFactory.getLogger(workerName)
В идеале я хотел бы найти решение по этим направлениям:
public class XmlParser implements Parser {
@Autowired
private Logger logger;
//...
}
А затем настройте функцию автоматического подключения Spring Framework на использование одного и того же экземпляра Logger во всех объектах, принадлежащих одному и тому же Worker. Разные работники должны получать разные экземпляры Logger, очевидно. Принуждение всех трех интерфейсов Parser
, Validator
и Feeder
к указанию метода типа setLogger()
кажется, по меньшей мере, не элегантным.
Как я мог выполнить эту задачу, используя какое-нибудь умное решение для внедрения зависимостей?