gpt4 book ai didi

java - 如何使用 Google Guice 注入(inject)记录器

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:24 26 4
gpt4 key购买 nike

通常我这样定义记录器:

private static final Logger logger = LoggerFactory.getLogger(MyClass.class); 

但是在使用@Inject时我们必须使用非静态和非final字段,比如:

@Inject
private Logger logger;

即记录器将在此类的每个实例中创建,记录器也是可变的。可能存在某种使记录器静态的方法?还有我如何将记录器绑定(bind)到某个类(我在从工厂 LoggerFactory.getLogger(MyClass.class); 创建记录器对象时使用发送类对象,如何使用注入(inject)以相同的方式创建记录器?) ?

最佳答案

请检查Custom Injections在 Guice wiki 上,有一个完整的 Log4J 示例。

编辑:您可以为记录器使用 static 字段或 final 字段,但不能使用 static final 字段。这是一个 Java limitation .

也要小心that :

Injecting final fields is not recommended because the injected value may not be visible to other threads.

还没有测试过,但是文章中的代码应该适用于静态字段,尽管您可以通过摆脱 MembersInjector 并在 TypeListener 中完成所有操作来改进它(因为静态字段只需要设置一次).

使用 requestStaticInjection() 将强制您在模块文件中列出所有类 - 这不是一个好主意,因为您很快就会忘记添加一个。

OTOH 如果你只想支持 JUL,你最好使用 built-in support (正如 Jeff 所提到的,我假设您不想要一个笼统的答案,因为您没有在您的问题中具体提到 JUL)。

关于java - 如何使用 Google Guice 注入(inject)记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com