У меня есть класс структуры вдоль этих линий:Использование Spring для введения различных экземпляров класса на основе экземпляра иерархии
public class Worker {
private Parser parser;
private Validator validator;
private Feeder feeder;
//...
}
Parser
, Validator
и Feeder
являются все интерфейсы с различными классами, реализующими. Эти поля создаются в контексте создания Рабочего инструмента и не распределяются между работниками.
Что-то я хочу сделать, чтобы иметь один экземпляр org.slf4j.Logger
для каждого Рабочего, который затем будет использоваться синтаксическим анализатором, валидатором и фидером по мере необходимости. В принципе, при конкретизации, мы хотим, чтобы дать работнику имя, а затем все каротаж использовать это имя, например, так:
org.slf4j.LoggerFactory.getLogger(workerName)
В идеале, я хотел бы для решения вдоль этих линий:
public class XmlParser implements Parser {
@Autowired
private Logger logger;
//...
}
А затем у вас есть функция автоустановки Spring Framework, настроенная на использование того же экземпляра Logger во всех объектах, принадлежащих одному и тому же Работнику. Очевидно, что разные работники должны получить разные экземпляры Logger. Принуждение всех трех интерфейсов Parser
, Validator
и Feeder
, чтобы указать метод setLogger()
, по-видимому, выглядит неэлегантным.
Как я мог выполнить эту задачу, используя какое-то умное решение для инъекций зависимостей?
Вы также можете использовать ['LoggerFactory.getLogger (Worker.class);'] (http://slf4j.org/api/org/slf4j/LoggerFactory.html) –
@ JohanSjöberg: несколько экземпляров Worker (с разными имена) в этом сценарии будет использовать один и тот же Logger. Если это не было требованием, мы могли бы использовать такое решение: http://jgeeks.blogspot.com/2008/10/auto-injection-of-logger-into-spring.html –