【发布时间】:2012-06-28 00:46:03
【问题描述】:
我正在考虑为 slf4j 记录器使用 CDI 注入,所以我创建了一个生产者。
我将它注入一个可序列化的ApplicationScoped bean:
@ApplicationScoped
public final class CurrentApplicationBean implements Serializable {
@Inject
private transient Logger logger;
}
它必须是瞬态的,因为org.slf4j.Logger 是一个不扩展Serializable 的接口,但这意味着必须在反序列化后重新注入记录器。
我认为 CDI 无法处理这个问题,你知道吗?
此外,提供者总是提供一个新的Logger 实例,因为它必须从InjectionPoint 设置记录器名称,这意味着RequestScoped bean 有自己的记录器实例,而不是每个类的静态记录器。
也许日志记录不是 CDI 注入的好上下文...您有什么考虑?
【问题讨论】:
-
虽然 org.slf4j.Logger 出于向后兼容性的原因未标记为可序列化,但 org.slf4j.Logger 的大多数(如果不是全部)实际实现都是可序列化的。另请参阅glauche.de/2009/08/24
-
>>我认为 CDI 不处理这个问题,你知道什么不,它没有。 >>也许日志记录不是 CDI 注入的好上下文 这是一个很好的上下文 :) 你的原始代码应该在编译时出现警告,你应该没问题
标签: logging cdi code-injection