需求
对象初始化的操作中,需要用到@Autowired的对象
问题
一般来说初始化操作会放在构造函数中处理,但是@Autowired对象是在构造函数完成后才注入,导致初始化操作获取不到@Autowired对象
@SpringBootTest
@RunWith(SpringRunner.class)
public class PostConstructLifeCycleTest {
@Autowired
InjectedClass inject;
public PostConstructLifeCycleTest() {
//这里没有使用@Test,所以这里用的是spring.Assert,而不是junit的
Assert.notNull(inject, "此时还没注入");
}
@Test
public void testLifeCycle() {
}
}
@Component
class InjectedClass {
int num;
}
可以看到报错
java.lang.IllegalArgumentException: 此时还没注入
at org.springframework.util.Assert.notNull(Assert.java:198)
at com.travelsky.springboot.example.PostConstructLifeCycleTest.<init>
..省略异常栈
解决
使用@PostConstruct注解在方法上
@SpringBootTest
@RunWith(SpringRunner.class)
public class PostConstructLife