使用 @BeforeClass 初始化与 java 中的急切初始化
Initializing with @BeforeClass vs eager initialization in java
我正在使用 spring 和依赖注入,在我的 TestNG class 中遇到了这段令人费解的代码,我想解决这个问题
我有下面的代码
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 注入发生在您的 class.
实例创建之后
因为在创建 myTestB
(顺便说一句,它应该以大写字母开头)时,您在尚未注入的 someInstanceA
上调用 getVarB
,您会得到一个NullPointerException
.
第二种情况有效,因为 @BeforeClass
运行 在第一次测试 运行 之前的一次,在对象创建之后。因此,当在 getVarB
方法中调用 someInstanceA#getVarB
时,someInstanceA
已经自动装配并且不为空。
我正在使用 spring 和依赖注入,在我的 TestNG class 中遇到了这段令人费解的代码,我想解决这个问题
我有下面的代码
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 注入发生在您的 class.
实例创建之后因为在创建 myTestB
(顺便说一句,它应该以大写字母开头)时,您在尚未注入的 someInstanceA
上调用 getVarB
,您会得到一个NullPointerException
.
第二种情况有效,因为 @BeforeClass
运行 在第一次测试 运行 之前的一次,在对象创建之后。因此,当在 getVarB
方法中调用 someInstanceA#getVarB
时,someInstanceA
已经自动装配并且不为空。