gpt4 book ai didi

java - 如何在枚举中注入(inject)记录器

转载 作者:行者123 更新时间:2023-12-01 21:08:29 25 4
gpt4 key购买 nike

当我尝试将 Logger 生成器注入(inject)枚举时,我得到一个 NPE。如何在枚举中注入(inject)记录器?

示例:

public enum MyEnum {

HI("Hi there!"),
HELLO("Hello mister!");

@Inject
private Logger log;

private final String greeting;

private MyEnum(String greeting) {
this.greeting = greeting;
// this.log = LoggerFactory.getLogger(this.getClass());
}

public String getGreeting() {
log.debug("Method getGreeting called");
return this.greeting;
}

}

这个类在 log.debug() 行上给了我一个 NPE。当我删除 @Inject 并取消注释 this.log 行时,它可以工作。

测试用例如下所示:

@RunWith(Arquillian.class)
public class CoverKindTest {

@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addClass(MyEnum.class)
.addClass(LoggerProducer.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

@Test
public void testEnum() {
MyEnum myEnum = MyEnum.HI;
String greeting = myEnum.getGreeting();
assertThat("Should give the greeting.", greeting, is("Hi there!"));
}

}

可以在这里找到这个问题的完整可测试项目,MyEnum.class是原始问题,MyEnum1.class是没有注入(inject)的解决方案(有效,但不是什么我正在寻找),并且 MyEnum2.class 是建议的答案。

编辑:使用可行的解决方案更新了 GitHub 存储库。 https://github.com/martijnburger/how-to-inject-a-logger-in-an-enum

最佳答案

这种直接注入(inject)不起作用,因为枚举是静态的。您可以在枚举类中创建一个新的记录器

private static final Logger log = Logger.getLogger(Myenum.class.getName());

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

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