今天在测试一个功能,报出一个Null Point Exveption。Debug发现,是一个dao类是空指针。代码类似于这样的。
这段代码有什么问题?dao类不能用来new,new出来的dao对象,即使你的dao对象是用了Autowired注解,也会是null值。因为@Autowired是从IOC容器中获取已经初始化的对象,此对象中@Autowired的属性也已经通过容器完成了注入,整个生命周期都交由容器管控。然而通过new出来的对象,生命周期不受容器管控,自然也无法完成属性的自动注入。
@Autowired相当于setter,在注入之前,对象已经实例化,是在这个接口注解的时候实例化的;而new只是实例化一个对象,而且new的对象不能调用注入的其他类
正确的写法应该是
class UserService{
@Autowired
private UserDao userDao;
public void main(){
userDao.test();
}
}