我正在使用带有依赖注入的spring,并在我的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就像一个默认构造函数,并且急切初始化类似于使用默认构造函数初始化变量。我在这里缺少什么?
答案 0 :(得分:2)
简短回答:在创建类的实例后发生Bean注入。
因为在创建myTestB
时(顺便说一下,它应该以大写字母开头),你在getVarB
上调用尚未注入的someInstanceA
,你得到一个{{ 1}}。
第二种情况有效,因为NullPointerException
在第一次测试运行之前,在对象创建之后运行一次。因此,在@BeforeClass
方法中调用someInstanceA#getVarB
时,getVarB
已经自动连接,而不是空。