gpt4 book ai didi

java - 使用 @BeforeClass 初始化 vs java 中的急切初始化

转载 作者:行者123 更新时间:2023-11-30 02:57:38 25 4
gpt4 key购买 nike

我正在使用 spring 进行依赖注入(inject),并在我的 TestNG 类中遇到了这段令人费解的代码,我想理清这个问题的思路

我有下面的代码

public class myBase {

@Autowired @Lazy @Qualifier("someInstanceA")
protected SomeClass someInstanceA;
.
.
}

public class myTestB extends myBase {
private String varB = someInstanceA.getVarB();

@Test
.
.
}

上面的代码在行处给了我一个 NullPointerException

 private String varB = someInstanceA.getVarB();

但是当我在下面这样做时

 public class myTestB extends myBase {
private String varB;

@BeforeClass
private void getVarB() {
varB = someInstanceA.getVarB();
}

@Test
.
.
}

测试运行良好。我读到 BeforeClass 就像一个默认构造函数,而急切初始化类似于使用默认构造函数初始化变量。我在这里缺少什么?

最佳答案

简短的回答:Bean 注入(inject)发生在创建类的实例之后。

由于在创建 myTestB (顺便说一句,它应该以大写字母开头)时,您在 someInstanceA 上调用 getVarB ,这是尚未注入(inject),您会收到 NullPointerException

第二种情况有效,因为 @BeforeClass 在第一次测试运行之前、对象创建之后运行一次。因此,当在 getVarB 方法中调用 someInstanceA#getVarB 时,someInstanceA 已经 Autowiring 并且不为 null。

关于java - 使用 @BeforeClass 初始化 vs java 中的急切初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799074/

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