【发布时间】:2011-12-20 17:43:44
【问题描述】:
我的类结构是这样的:
public class Worker {
private Parser parser;
private Validator validator;
private Feeder feeder;
//...
}
Parser、Validator 和Feeder 都是具有不同实现类的接口。这些字段是在 Worker 实例化的上下文中实例化的,并且不会在 Worker 之间共享。
我想做的事情是为每个 Worker 拥有一个 org.slf4j.Logger 实例,然后解析器、验证器和馈送器将根据需要使用该实例。基本上,在实例化时,我们希望给 Worker 一个名称,然后让所有日志记录使用该名称,如下所示:
org.slf4j.LoggerFactory.getLogger(workerName)
理想情况下,我想要一个解决方案:
public class XmlParser implements Parser {
@Autowired
private Logger logger;
//...
}
然后将 Spring Framework 的自动装配功能配置为在属于同一 Worker 的所有对象中使用相同的 Logger 实例。显然,不同的工人应该得到不同的 Logger 实例。强制所有三个接口Parser、Validator 和Feeder 指定setLogger()-type 方法至少可以说是不雅的。
如何使用一些聪明的依赖注入解决方案来完成这项任务?
【问题讨论】:
-
@JohanSjöberg:在这种情况下,多个 Worker 实例(具有不同的名称)将共享同一个 Logger。如果这不是必需的,我们可以使用这样的解决方案:jgeeks.blogspot.com/2008/10/…
标签: java spring logging dependency-injection slf4j